CINXE.COM

%{^HOOK} - Perldoc Browser

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>%{^HOOK} - Perldoc Browser</title> <link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="Perldoc Browser"> <link rel="canonical" href="https://perldoc.perl.org/variables/%25%7B%5EHOOK%7D"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/stackoverflow-light.min.css" integrity="sha512-cG1IdFxqipi3gqLmksLtuk13C+hBa57a6zpWxMeoY3Q9O6ooFxq50DayCdm0QrDgZjMUn23z/0PMZlgft7Yp5Q==" crossorigin="anonymous" /> <style> body { background: #f4f4f5; color: #020202; } .navbar-dark { background-image: -webkit-linear-gradient(top, #005f85 0, #002e49 100%); background-image: -o-linear-gradient(top, #005f85 0, #002e49 100%); background-image: linear-gradient(to bottom, #005f85 0, #002e49 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff005f85', endColorstr='#ff002e49', GradientType=0); background-repeat: repeat-x; } .navbar-dark .navbar-nav .nav-link, .navbar-dark .navbar-nav .nav-link:focus { color: #fff } .navbar-dark .navbar-nav .nav-link:hover { color: #ffef68 } #wrapperlicious { margin: 0 auto; font: 0.9em 'Helvetica Neue', Helvetica, sans-serif; font-weight: normal; line-height: 1.5em; margin: 0; padding: 0; } #wrapperlicious h1 { font-size: 1.5em } #wrapperlicious h2 { font-size: 1.3em } #wrapperlicious h3 { font-size: 1.1em } #wrapperlicious h4 { font-size: 0.9em } #wrapperlicious h1, #wrapperlicious h2, #wrapperlicious h3, #wrapperlicious h4, #wrapperlicious dt { color: #020202; margin-top: 1em; margin-bottom: 1em; position: relative; font-weight: bold; } #wrapperlicious a { color: inherit; text-decoration: underline } #wrapperlicious #toc { text-decoration: none } #wrapperlicious a:hover { color: #2a2a2a } #wrapperlicious a img { border: 0 } #wrapperlicious :not(pre) > code { color: inherit; background-color: rgba(0, 0, 0, 0.04); border-radius: 3px; font: 0.9em Consolas, Menlo, Monaco, monospace; padding: 0.3em; } #wrapperlicious dd { margin: 0; margin-left: 2em; } #wrapperlicious dt { color: #2a2a2a; font-weight: bold; margin-left: 0.9em; } #wrapperlicious p { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious li > p { margin-bottom: 0; margin-top: 0; } #wrapperlicious pre { border: 1px solid #c1c1c1; border-radius: 3px; font: 100% Consolas, Menlo, Monaco, monospace; margin-bottom: 1em; margin-top: 1em; } #wrapperlicious pre > code { display: block; background-color: #f6f6f6; font: 0.9em Consolas, Menlo, Monaco, monospace; line-height: 1.5em; text-align: left; white-space: pre; padding: 1em; } #wrapperlicious dl, #wrapperlicious ol, #wrapperlicious ul { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious ul { list-style-type: square; } #wrapperlicious ul ul { margin-bottom: 0px; margin-top: 0px; } #footer { font-size: 0.8em; padding-top: 0.5em; text-align: center; } #more { display: inline; font-size: 0.8em; } #perldocdiv { background-color: #fff; border: 1px solid #c1c1c1; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin-left: auto; margin-right: auto; padding: 3em; padding-top: 1em; max-width: 960px; } #moduleversion { float: right } #wrapperlicious .leading-notice { font-style: italic; padding-left: 1em; margin-top: 1em; margin-bottom: 1em; } #wrapperlicious .permalink { display: none; left: -0.75em; position: absolute; padding-right: 0.25em; text-decoration: none; } #wrapperlicious h1:hover .permalink, #wrapperlicious h2:hover .permalink, #wrapperlicious h3:hover .permalink, #wrapperlicious h4:hover .permalink, #wrapperlicious dt:hover .permalink { display: block; } </style> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KVNWBNT5FB"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KVNWBNT5FB'); gtag('config', 'UA-50555-3'); </script> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark justify-content-between"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="/"><img src="/images/perl_camel_30.png" width="30" height="30" class="d-inline-block align-top" alt="Perl Camel Logo"> Perldoc Browser</a> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-stable" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">5.41.3</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-stable"> <a class="dropdown-item" href="/variables/%25%7B%5EHOOK%7D">Latest</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1/variables/%25%7B%5EHOOK%7D">5.40.1</a> <a class="dropdown-item" href="/5.40.0/variables/%25%7B%5EHOOK%7D">5.40.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3/variables/%25%7B%5EHOOK%7D">5.38.3</a> <a class="dropdown-item" href="/5.38.2/variables/%25%7B%5EHOOK%7D">5.38.2</a> <a class="dropdown-item" href="/5.38.1/variables/%25%7B%5EHOOK%7D">5.38.1</a> <a class="dropdown-item" href="/5.38.0/variables/%25%7B%5EHOOK%7D">5.38.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.36.3/variables/%25%7B%5EHOOK%7D">5.36.3</a> <a class="dropdown-item" href="/5.36.2/variables/%25%7B%5EHOOK%7D">5.36.2</a> <a class="dropdown-item" href="/5.36.1/variables/%25%7B%5EHOOK%7D">5.36.1</a> <a class="dropdown-item" href="/5.36.0/variables/%25%7B%5EHOOK%7D">5.36.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.34.3/variables/%25%7B%5EHOOK%7D">5.34.3</a> <a class="dropdown-item" href="/5.34.2/variables/%25%7B%5EHOOK%7D">5.34.2</a> <a class="dropdown-item" href="/5.34.1/variables/%25%7B%5EHOOK%7D">5.34.1</a> <a class="dropdown-item" href="/5.34.0/variables/%25%7B%5EHOOK%7D">5.34.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.32.1/variables/%25%7B%5EHOOK%7D">5.32.1</a> <a class="dropdown-item" href="/5.32.0/variables/%25%7B%5EHOOK%7D">5.32.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.30.3/variables/%25%7B%5EHOOK%7D">5.30.3</a> <a class="dropdown-item" href="/5.30.2/variables/%25%7B%5EHOOK%7D">5.30.2</a> <a class="dropdown-item" href="/5.30.1/variables/%25%7B%5EHOOK%7D">5.30.1</a> <a class="dropdown-item" href="/5.30.0/variables/%25%7B%5EHOOK%7D">5.30.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.28.3/variables/%25%7B%5EHOOK%7D">5.28.3</a> <a class="dropdown-item" href="/5.28.2/variables/%25%7B%5EHOOK%7D">5.28.2</a> <a class="dropdown-item" href="/5.28.1/variables/%25%7B%5EHOOK%7D">5.28.1</a> <a class="dropdown-item" href="/5.28.0/variables/%25%7B%5EHOOK%7D">5.28.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.26.3/variables/%25%7B%5EHOOK%7D">5.26.3</a> <a class="dropdown-item" href="/5.26.2/variables/%25%7B%5EHOOK%7D">5.26.2</a> <a class="dropdown-item" href="/5.26.1/variables/%25%7B%5EHOOK%7D">5.26.1</a> <a class="dropdown-item" href="/5.26.0/variables/%25%7B%5EHOOK%7D">5.26.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.24.4/variables/%25%7B%5EHOOK%7D">5.24.4</a> <a class="dropdown-item" href="/5.24.3/variables/%25%7B%5EHOOK%7D">5.24.3</a> <a class="dropdown-item" href="/5.24.2/variables/%25%7B%5EHOOK%7D">5.24.2</a> <a class="dropdown-item" href="/5.24.1/variables/%25%7B%5EHOOK%7D">5.24.1</a> <a class="dropdown-item" href="/5.24.0/variables/%25%7B%5EHOOK%7D">5.24.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.22.4/variables/%25%7B%5EHOOK%7D">5.22.4</a> <a class="dropdown-item" href="/5.22.3/variables/%25%7B%5EHOOK%7D">5.22.3</a> <a class="dropdown-item" href="/5.22.2/variables/%25%7B%5EHOOK%7D">5.22.2</a> <a class="dropdown-item" href="/5.22.1/variables/%25%7B%5EHOOK%7D">5.22.1</a> <a class="dropdown-item" href="/5.22.0/variables/%25%7B%5EHOOK%7D">5.22.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.20.3/variables/%25%7B%5EHOOK%7D">5.20.3</a> <a class="dropdown-item" href="/5.20.2/variables/%25%7B%5EHOOK%7D">5.20.2</a> <a class="dropdown-item" href="/5.20.1/variables/%25%7B%5EHOOK%7D">5.20.1</a> <a class="dropdown-item" href="/5.20.0/variables/%25%7B%5EHOOK%7D">5.20.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.18.4/variables/%25%7B%5EHOOK%7D">5.18.4</a> <a class="dropdown-item" href="/5.18.3/variables/%25%7B%5EHOOK%7D">5.18.3</a> <a class="dropdown-item" href="/5.18.2/variables/%25%7B%5EHOOK%7D">5.18.2</a> <a class="dropdown-item" href="/5.18.1/variables/%25%7B%5EHOOK%7D">5.18.1</a> <a class="dropdown-item" href="/5.18.0/variables/%25%7B%5EHOOK%7D">5.18.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.16.3/variables/%25%7B%5EHOOK%7D">5.16.3</a> <a class="dropdown-item" href="/5.16.2/variables/%25%7B%5EHOOK%7D">5.16.2</a> <a class="dropdown-item" href="/5.16.1/variables/%25%7B%5EHOOK%7D">5.16.1</a> <a class="dropdown-item" href="/5.16.0/variables/%25%7B%5EHOOK%7D">5.16.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.14.4/variables/%25%7B%5EHOOK%7D">5.14.4</a> <a class="dropdown-item" href="/5.14.3/variables/%25%7B%5EHOOK%7D">5.14.3</a> <a class="dropdown-item" href="/5.14.2/variables/%25%7B%5EHOOK%7D">5.14.2</a> <a class="dropdown-item" href="/5.14.1/variables/%25%7B%5EHOOK%7D">5.14.1</a> <a class="dropdown-item" href="/5.14.0/variables/%25%7B%5EHOOK%7D">5.14.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.12.5/variables/%25%7B%5EHOOK%7D">5.12.5</a> <a class="dropdown-item" href="/5.12.4/variables/%25%7B%5EHOOK%7D">5.12.4</a> <a class="dropdown-item" href="/5.12.3/variables/%25%7B%5EHOOK%7D">5.12.3</a> <a class="dropdown-item" href="/5.12.2/variables/%25%7B%5EHOOK%7D">5.12.2</a> <a class="dropdown-item" href="/5.12.1/variables/%25%7B%5EHOOK%7D">5.12.1</a> <a class="dropdown-item" href="/5.12.0/variables/%25%7B%5EHOOK%7D">5.12.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.10.1/variables/%25%7B%5EHOOK%7D">5.10.1</a> <a class="dropdown-item" href="/5.10.0/variables/%25%7B%5EHOOK%7D">5.10.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.8.9/variables/%25%7B%5EHOOK%7D">5.8.9</a> <a class="dropdown-item" href="/5.8.8/variables/%25%7B%5EHOOK%7D">5.8.8</a> <a class="dropdown-item" href="/5.8.7/variables/%25%7B%5EHOOK%7D">5.8.7</a> <a class="dropdown-item" href="/5.8.6/variables/%25%7B%5EHOOK%7D">5.8.6</a> <a class="dropdown-item" href="/5.8.5/variables/%25%7B%5EHOOK%7D">5.8.5</a> <a class="dropdown-item" href="/5.8.4/variables/%25%7B%5EHOOK%7D">5.8.4</a> <a class="dropdown-item" href="/5.8.3/variables/%25%7B%5EHOOK%7D">5.8.3</a> <a class="dropdown-item" href="/5.8.2/variables/%25%7B%5EHOOK%7D">5.8.2</a> <a class="dropdown-item" href="/5.8.1/variables/%25%7B%5EHOOK%7D">5.8.1</a> <a class="dropdown-item" href="/5.8.0/variables/%25%7B%5EHOOK%7D">5.8.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.6.2/variables/%25%7B%5EHOOK%7D">5.6.2</a> <a class="dropdown-item" href="/5.6.1/variables/%25%7B%5EHOOK%7D">5.6.1</a> <a class="dropdown-item" href="/5.6.0/variables/%25%7B%5EHOOK%7D">5.6.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.005_04/variables/%25%7B%5EHOOK%7D">5.005_04</a> <a class="dropdown-item" href="/5.005_03/variables/%25%7B%5EHOOK%7D">5.005_03</a> <a class="dropdown-item" href="/5.005_02/variables/%25%7B%5EHOOK%7D">5.005_02</a> <a class="dropdown-item" href="/5.005_01/variables/%25%7B%5EHOOK%7D">5.005_01</a> <a class="dropdown-item" href="/5.005/variables/%25%7B%5EHOOK%7D">5.005</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-dev" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dev</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-dev"> <a class="dropdown-item" href="/blead/variables/%25%7B%5EHOOK%7D">blead</a> <a class="dropdown-item" href="/5.41.10/variables/%25%7B%5EHOOK%7D">5.41.10</a> <a class="dropdown-item" href="/5.41.9/variables/%25%7B%5EHOOK%7D">5.41.9</a> <a class="dropdown-item" href="/5.41.8/variables/%25%7B%5EHOOK%7D">5.41.8</a> <a class="dropdown-item" href="/5.41.7/variables/%25%7B%5EHOOK%7D">5.41.7</a> <a class="dropdown-item" href="/5.41.6/variables/%25%7B%5EHOOK%7D">5.41.6</a> <a class="dropdown-item" href="/5.41.5/variables/%25%7B%5EHOOK%7D">5.41.5</a> <a class="dropdown-item" href="/5.41.4/variables/%25%7B%5EHOOK%7D">5.41.4</a> <a class="dropdown-item active" href="/5.41.3/variables/%25%7B%5EHOOK%7D">5.41.3</a> <a class="dropdown-item" href="/5.41.2/variables/%25%7B%5EHOOK%7D">5.41.2</a> <a class="dropdown-item" href="/5.41.1/variables/%25%7B%5EHOOK%7D">5.41.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1-RC1/variables/%25%7B%5EHOOK%7D">5.40.1-RC1</a> <a class="dropdown-item" href="/5.40.0-RC2/variables/%25%7B%5EHOOK%7D">5.40.0-RC2</a> <a class="dropdown-item" href="/5.40.0-RC1/variables/%25%7B%5EHOOK%7D">5.40.0-RC1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.39.10/variables/%25%7B%5EHOOK%7D">5.39.10</a> <a class="dropdown-item" href="/5.39.9/variables/%25%7B%5EHOOK%7D">5.39.9</a> <a class="dropdown-item" href="/5.39.8/variables/%25%7B%5EHOOK%7D">5.39.8</a> <a class="dropdown-item" href="/5.39.7/variables/%25%7B%5EHOOK%7D">5.39.7</a> <a class="dropdown-item" href="/5.39.6/variables/%25%7B%5EHOOK%7D">5.39.6</a> <a class="dropdown-item" href="/5.39.5/variables/%25%7B%5EHOOK%7D">5.39.5</a> <a class="dropdown-item" href="/5.39.4/variables/%25%7B%5EHOOK%7D">5.39.4</a> <a class="dropdown-item" href="/5.39.3/variables/%25%7B%5EHOOK%7D">5.39.3</a> <a class="dropdown-item" href="/5.39.2/variables/%25%7B%5EHOOK%7D">5.39.2</a> <a class="dropdown-item" href="/5.39.1/variables/%25%7B%5EHOOK%7D">5.39.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3-RC1/variables/%25%7B%5EHOOK%7D">5.38.3-RC1</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-nav" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Documentation</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-nav"> <a class="dropdown-item" href="/5.41.3/perl">Perl</a> <a class="dropdown-item" href="/5.41.3/perlintro">Intro</a> <a class="dropdown-item" href="/5.41.3/perl#Tutorials">Tutorials</a> <a class="dropdown-item" href="/5.41.3/perlfaq">FAQs</a> <a class="dropdown-item" href="/5.41.3/perl#Reference-Manual">Reference</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.41.3/perlop">Operators</a> <a class="dropdown-item" href="/5.41.3/functions">Functions</a> <a class="dropdown-item" href="/5.41.3/variables">Variables</a> <a class="dropdown-item" href="/5.41.3/modules">Modules</a> <a class="dropdown-item" href="/5.41.3/perlutil">Utilities</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.41.3/perldelta">Release Notes</a> <a class="dropdown-item" href="/5.41.3/perlcommunity">Community</a> <a class="dropdown-item" href="/5.41.3/perlhist">History</a> </div> </li> </ul> <ul class="navbar-nav"> <script> function set_expand (expand) { var perldocdiv = document.getElementById('perldocdiv'); var width = window.getComputedStyle(perldocdiv).getPropertyValue('max-width'); var expanded = (width == '' || width == 'none') ? true : false; if (expand === null) { expand = !expanded; } if ((expand && !expanded) || (!expand && expanded)) { perldocdiv.style.setProperty('max-width', expand ? 'none' : '960px'); var button_classlist = document.getElementById('content-expand-button').classList; if (expand) { button_classlist.add('btn-light'); button_classlist.remove('btn-outline-light'); } else { button_classlist.add('btn-outline-light'); button_classlist.remove('btn-light'); } } return expand; } function toggle_expand () { var expand = set_expand(null); document.cookie = 'perldoc_expand=' + (expand ? 1 : 0) + '; path=/; expires=Tue, 19 Jan 2038 03:14:07 UTC'; } function read_expand () { return document.cookie.split(';').some(function (item) { return item.indexOf('perldoc_expand=1') >= 0 }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { if (read_expand()) { set_expand(true); } }); } else if (read_expand()) { set_expand(true); } </script> <button id="content-expand-button" type="button" class="btn btn-outline-light d-none d-lg-inline-block mr-4" onclick="toggle_expand()">Expand</button> </ul> <form class="form-inline" method="get" action="/5.41.3/search"> <input class="form-control mr-3" type="search" name="q" placeholder="Search" aria-label="Search" value=""> </form> </div> </nav> <div id="wrapperlicious" class="container-fluid"> <div id="perldocdiv"> <div id="links"> <a href="/5.41.3/variables">variables</a> / <a href="/5.41.3/variables/%25%7B%5EHOOK%7D">%{^HOOK}</a> <div id="more"> (<a href="/5.41.3/variables/%25%7B%5EHOOK%7D.txt">source</a>, <a href="https://metacpan.org/pod/perlvar#%25%7B%5EHOOK%7D">CPAN</a>) </div> </div> <div class="leading-notice"> You are viewing the version of this documentation from Perl 5.41.3. This is a development version of Perl. </div> <dl> <dt id="%{^HOOK}"><a class="permalink" href="#%25%7B%5EHOOK%7D">#</a><a id="HOOK"></a>%{^HOOK} </dt> <dd> <p>This hash contains coderefs which are called when various perl keywords which are hard or impossible to wrap are called. The keys of this hash are named after the keyword that is being hooked, followed by two underbars and then a phase term; either &quot;before&quot; or &quot;after&quot;.</p> <p>Perl will throw an error if you attempt modify a key which is not documented to exist, or if you attempt to store anything other than a code reference or undef in the hash. If you wish to use an object to implement a hook you can use currying to embed the object into an anonymous code reference.</p> <p>Currently there is only one keyword which can be hooked, <code>require</code>, but it is expected that in future releases there will be additional keywords with hook support.</p> <dl> <dt id="require__before"><a class="permalink" href="#require__before">#</a>require__before</dt> <dd> <p>The routine indicated by <code>${^HOOK}{require__before}</code> is called by <code>require</code> <b>before</b> it checks <code>%INC</code>, looks up <code>@INC</code>, calls INC hooks, or compiles any code. It is called with a single argument, the filename for the item being required (package names are converted to paths). It may alter this filename to change what file is loaded. If the hook dies during execution then it will block the require from executing.</p> <p>In order to make it easy to perform an action with shared state both before and after the require keyword was executed the <code>require__before</code> hook may return a &quot;post-action&quot; coderef which will in turn be executed when the <code>require</code> completes. This coderef will be executed regardless as to whether the require completed succesfully or threw an exception. It will be called with the filename that was required. You can check %INC to determine if the require was successful. Any other return from the <code>require__before</code> hook will be silently ignored.</p> <p><code>require__before</code> hooks are called in FIFO order, and if the hook returns a code reference those code references will be called in FILO order. In other words if A requires B requires C, then <code>require__before</code> will be called first for A, then B and then C, and the post-action code reference will executed first for C, then B and then finally A.</p> <p>Well behaved code should ensure that when setting up a <code>require__before</code> hook that any prior installed hook will be called, and that their return value, if a code reference, will be called as well. See <a href="/5.41.3/perlfunc#require">&quot;require&quot; in perlfunc</a> for an example implementation.</p> </dd> <dt id="require__after"><a class="permalink" href="#require__after">#</a>require__after</dt> <dd> <p>The routine indicated by <code>${^HOOK}{require__after}</code> is called by <code>require</code> <b>after</b> the require completes. It is called with a single argument, the filename for the item being required (package names are converted to paths). It is executed when the <code>require</code> completes, either via exception or via completion of the require statement, and you can check <code>%INC</code> to determine if the require was successful.</p> <p>The <code>require__after</code> hook is called for each required file in FILO order. In other words if A requires B requires C, then <code>require__after</code> will be called first for C, then B and then A.</p> </dd> </dl> </dd> </dl> </div> <div id="footer"> <p>Perldoc Browser is maintained by Dan Book (<a href="https://metacpan.org/author/DBOOK">DBOOK</a>). Please contact him via the <a href="https://github.com/Grinnz/perldoc-browser/issues">GitHub issue tracker</a> or <a href="mailto:dbook@cpan.org">email</a> regarding any issues with the site itself, search, or rendering of documentation.</p> <p>The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via the <a href="https://github.com/Perl/perl5/issues">Perl issue tracker</a>, the <a href="https://lists.perl.org/list/perl5-porters.html">mailing list</a>, or <a href="https://kiwiirc.com/client/irc.perl.org/p5p">IRC</a> to report any issues with the contents or format of the documentation.</p> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js" integrity="sha512-/DXTXr6nQodMUiq+IUJYCt2PPOUjrHJ9wFrqpJ3XkgPNOZVfMok7cRw6CSxyCQxXn6ozlESsSh1/sMCTF1rL/g==" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js" integrity="sha512-ubuT8Z88WxezgSqf3RLuNi5lmjstiJcyezx34yIU2gAHonIi27Na7atqzUZCOoY4CExaoFumzOsFQ2Ch+I/HCw==" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script> <script src="/js/highlight.pack.js"></script> <script>hljs.highlightAll();</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10