xref: /openbsd-src/gnu/usr.bin/perl/pod/perlsub.pod (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
1=head1 NAME
2X<subroutine> X<function>
3
4perlsub - Perl subroutines (user-defined functions)
5
6=head1 SYNOPSIS
7
8To declare subroutines:
9X<subroutine, declaration> X<sub>
10
11    sub NAME;                       # A "forward" declaration.
12    sub NAME(PROTO);                #  ditto, but with prototypes
13    sub NAME : ATTRS;               #  with attributes
14    sub NAME(PROTO) : ATTRS;        #  with attributes and prototypes
15
16    sub NAME BLOCK                  # A declaration and a definition.
17    sub NAME(PROTO) BLOCK           #  ditto, but with prototypes
18    sub NAME : ATTRS BLOCK          #  with attributes
19    sub NAME(PROTO) : ATTRS BLOCK   #  with prototypes and attributes
20
21    use feature 'signatures';
22    sub NAME(SIG) BLOCK                     # with signature
23    sub NAME :ATTRS (SIG) BLOCK             # with signature, attributes
24    sub NAME :prototype(PROTO) (SIG) BLOCK  # with signature, prototype
25
26To define an anonymous subroutine at runtime:
27X<subroutine, anonymous>
28
29    $subref = sub BLOCK;                    # no proto
30    $subref = sub (PROTO) BLOCK;            # with proto
31    $subref = sub : ATTRS BLOCK;            # with attributes
32    $subref = sub (PROTO) : ATTRS BLOCK;    # with proto and attributes
33
34    use feature 'signatures';
35    $subref = sub (SIG) BLOCK;          # with signature
36    $subref = sub : ATTRS(SIG) BLOCK;   # with signature, attributes
37
38To import subroutines:
39X<import>
40
41    use MODULE qw(NAME1 NAME2 NAME3);
42
43To call subroutines:
44X<subroutine, call> X<call>
45
46    NAME(LIST);     # Regular subroutine call.
47    NAME LIST;      # Parentheses optional if predeclared/imported.
48    &NAME(LIST);    # Circumvent prototypes.
49    &NAME;          # Makes current @_ visible to called subroutine.
50
51=head1 DESCRIPTION
52
53Like many languages, Perl provides for user-defined subroutines.
54These may be located anywhere in the main program, loaded in from
55other files via the C<do>, C<require>, or C<use> keywords, or
56generated on the fly using C<eval> or anonymous subroutines.
57You can even call a function indirectly using a variable containing
58its name or a CODE reference.
59
60The Perl model for function call and return values is simple: all
61functions are passed as parameters one single flat list of scalars, and
62all functions likewise return to their caller one single flat list of
63scalars.  Any arrays or hashes in these call and return lists will
64collapse, losing their identities--but you may always use
65pass-by-reference instead to avoid this.  Both call and return lists may
66contain as many or as few scalar elements as you'd like.  (Often a
67function without an explicit return statement is called a subroutine, but
68there's really no difference from Perl's perspective.)
69X<subroutine, parameter> X<parameter>
70
71In a subroutine that uses signatures (see L</Signatures> below),
72arguments are assigned into lexical variables introduced by the
73signature.  In the current implementation of Perl they are also
74accessible in the C<@_> array in the same way as for non-signature
75subroutines, but accessing them in this manner is now discouraged inside
76such a signature-using subroutine.
77
78In a subroutine that does not use signatures, any arguments passed in
79show up in the array C<@_>.  Therefore, if you called a function with
80two arguments, those would be stored in C<$_[0]> and C<$_[1]>.  The
81array C<@_> is a local array, but its elements are aliases for the
82actual scalar parameters.  In particular, if an element C<$_[0]> is
83updated, the corresponding argument is updated (or an error occurs if it
84is not updatable).  If an argument is an array or hash element which did
85not exist when the function was called, that element is created only
86when (and if) it is modified or a reference to it is taken.  (Some
87earlier versions of Perl created the element whether or not the element
88was assigned to.) Assigning to the whole array C<@_> removes that
89aliasing, and does not update any arguments.
90X<subroutine, argument> X<argument> X<@_>
91
92When not using signatures, Perl does not otherwise provide a means to
93create named formal parameters. In practice all you do is assign to a
94C<my()> list of these.  Variables that aren't declared to be private are
95global variables.  For gory details on creating private variables, see
96L</"Private Variables via my()"> and L</"Temporary Values via local()">.
97To create protected environments for a set of functions in a separate
98package (and probably a separate file), see L<perlmod/"Packages">.
99
100A C<return> statement may be used to exit a subroutine, optionally
101specifying the returned value, which will be evaluated in the
102appropriate context (list, scalar, or void) depending on the context of
103the subroutine call.  If you specify no return value, the subroutine
104returns an empty list in list context, the undefined value in scalar
105context, or nothing in void context.  If you return one or more
106aggregates (arrays and hashes), these will be flattened together into
107one large indistinguishable list.
108
109If no C<return> is found and if the last statement is an expression, its
110value is returned.  If the last statement is a loop control structure
111like a C<foreach> or a C<while>, the returned value is unspecified.  The
112empty sub returns the empty list.
113X<subroutine, return value> X<return value> X<return>
114
115Example:
116
117    sub max {
118        my $max = shift(@_);
119        foreach $foo (@_) {
120            $max = $foo if $max < $foo;
121        }
122        return $max;
123    }
124    $bestday = max($mon,$tue,$wed,$thu,$fri);
125
126Example:
127
128    # get a line, combining continuation lines
129    #  that start with whitespace
130
131    sub get_line {
132        $thisline = $lookahead;  # global variables!
133        LINE: while (defined($lookahead = <STDIN>)) {
134            if ($lookahead =~ /^[ \t]/) {
135                $thisline .= $lookahead;
136            }
137            else {
138                last LINE;
139            }
140        }
141        return $thisline;
142    }
143
144    $lookahead = <STDIN>;       # get first line
145    while (defined($line = get_line())) {
146        ...
147    }
148
149Assigning to a list of private variables to name your arguments:
150
151    sub maybeset {
152        my($key, $value) = @_;
153        $Foo{$key} = $value unless $Foo{$key};
154    }
155
156Because the assignment copies the values, this also has the effect
157of turning call-by-reference into call-by-value.  Otherwise a
158function is free to do in-place modifications of C<@_> and change
159its caller's values.
160X<call-by-reference> X<call-by-value>
161
162    upcase_in($v1, $v2);  # this changes $v1 and $v2
163    sub upcase_in {
164        for (@_) { tr/a-z/A-Z/ }
165    }
166
167You aren't allowed to modify constants in this way, of course.  If an
168argument were actually literal and you tried to change it, you'd take a
169(presumably fatal) exception.   For example, this won't work:
170X<call-by-reference> X<call-by-value>
171
172    upcase_in("frederick");
173
174It would be much safer if the C<upcase_in()> function
175were written to return a copy of its parameters instead
176of changing them in place:
177
178    ($v3, $v4) = upcase($v1, $v2);  # this doesn't change $v1 and $v2
179    sub upcase {
180        return unless defined wantarray;  # void context, do nothing
181        my @parms = @_;
182        for (@parms) { tr/a-z/A-Z/ }
183        return wantarray ? @parms : $parms[0];
184    }
185
186Notice how this (unprototyped) function doesn't care whether it was
187passed real scalars or arrays.  Perl sees all arguments as one big,
188long, flat parameter list in C<@_>.  This is one area where
189Perl's simple argument-passing style shines.  The C<upcase()>
190function would work perfectly well without changing the C<upcase()>
191definition even if we fed it things like this:
192
193    @newlist   = upcase(@list1, @list2);
194    @newlist   = upcase( split /:/, $var );
195
196Do not, however, be tempted to do this:
197
198    (@x, @y)   = upcase(@list1, @list2);
199
200Like the flattened incoming parameter list, the return list is also
201flattened on return.  So all you have managed to do here is stored
202everything in C<@x> and made C<@y> empty.  See
203L</Pass by Reference> for alternatives.
204
205A subroutine may be called using an explicit C<&> prefix.  The
206C<&> is optional in modern Perl, as are parentheses if the
207subroutine has been predeclared.  The C<&> is I<not> optional
208when just naming the subroutine, such as when it's used as
209an argument to defined() or undef().  Nor is it optional when you
210want to do an indirect subroutine call with a subroutine name or
211reference using the C<&$subref()> or C<&{$subref}()> constructs,
212although the C<< $subref->() >> notation solves that problem.
213See L<perlref> for more about all that.
214X<&>
215
216Subroutines may be called recursively.  If a subroutine is called
217using the C<&> form, the argument list is optional, and if omitted,
218no C<@_> array is set up for the subroutine: the C<@_> array at the
219time of the call is visible to subroutine instead.  This is an
220efficiency mechanism that new users may wish to avoid.
221X<recursion>
222
223    &foo(1,2,3);        # pass three arguments
224    foo(1,2,3);         # the same
225
226    foo();              # pass an empty argument list
227    &foo();             # the same
228
229    &foo;               # foo() gets current args, like foo(@_)!
230    use strict 'subs';
231    foo;                # like foo() iff sub foo predeclared, else
232                        # a compile-time error
233    no strict 'subs';
234    foo;                # like foo() iff sub foo predeclared, else
235                        # a literal string "foo"
236
237Not only does the C<&> form make the argument list optional, it also
238disables any prototype checking on arguments you do provide.  This
239is partly for historical reasons, and partly for having a convenient way
240to cheat if you know what you're doing.  See L</Prototypes> below.
241X<&>
242
243Since Perl 5.16.0, the C<__SUB__> token is available under C<use feature
244'current_sub'> and C<use v5.16>.  It will evaluate to a reference to the
245currently-running sub, which allows for recursive calls without knowing
246your subroutine's name.
247
248    use v5.16;
249    my $factorial = sub {
250        my ($x) = @_;
251        return 1 if $x == 1;
252        return($x * __SUB__->( $x - 1 ) );
253    };
254
255The behavior of C<__SUB__> within a regex code block (such as C</(?{...})/>)
256is subject to change.
257
258Subroutines whose names are in all upper case are reserved to the Perl
259core, as are modules whose names are in all lower case.  A subroutine in
260all capitals is a loosely-held convention meaning it will be called
261indirectly by the run-time system itself, usually due to a triggered event.
262Subroutines whose name start with a left parenthesis are also reserved the
263same way.  The following is a list of some subroutines that currently do
264special, pre-defined things.
265
266=over
267
268=item documented later in this document
269
270C<AUTOLOAD>
271
272=item documented in L<perlmod>
273
274C<CLONE>, C<CLONE_SKIP>
275
276=item documented in L<perlobj>
277
278C<DESTROY>, C<DOES>
279
280=item documented in L<perltie>
281
282C<BINMODE>, C<CLEAR>, C<CLOSE>, C<DELETE>, C<DESTROY>, C<EOF>, C<EXISTS>,
283C<EXTEND>, C<FETCH>, C<FETCHSIZE>, C<FILENO>, C<FIRSTKEY>, C<GETC>,
284C<NEXTKEY>, C<OPEN>, C<POP>, C<PRINT>, C<PRINTF>, C<PUSH>, C<READ>,
285C<READLINE>, C<SCALAR>, C<SEEK>, C<SHIFT>, C<SPLICE>, C<STORE>,
286C<STORESIZE>, C<TELL>, C<TIEARRAY>, C<TIEHANDLE>, C<TIEHASH>,
287C<TIESCALAR>, C<UNSHIFT>, C<UNTIE>, C<WRITE>
288
289=item documented in L<PerlIO::via>
290
291C<BINMODE>, C<CLEARERR>, C<CLOSE>, C<EOF>, C<ERROR>, C<FDOPEN>, C<FILENO>,
292C<FILL>, C<FLUSH>, C<OPEN>, C<POPPED>, C<PUSHED>, C<READ>, C<SEEK>,
293C<SETLINEBUF>, C<SYSOPEN>, C<TELL>, C<UNREAD>, C<UTF8>, C<WRITE>
294
295=item documented in L<perlfunc>
296
297L<< C<import>|perlfunc/use >>, L<< C<unimport>|perlfunc/use >>,
298L<< C<INC>|perlfunc/require >>
299
300=item documented in L<UNIVERSAL>
301
302C<VERSION>
303
304=item documented in L<perldebguts>
305
306C<DB::DB>, C<DB::sub>, C<DB::lsub>, C<DB::goto>, C<DB::postponed>
307
308=item undocumented, used internally by the L<overload> feature
309
310any starting with C<(>
311
312=back
313
314The C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT> and C<END> subroutines
315are not so much subroutines as named special code blocks, of which you
316can have more than one in a package, and which you can B<not> call
317explicitly.  See L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END">
318
319=head2 Signatures
320
321X<formal parameter> X<parameter, formal>
322
323Perl has a facility to allow a subroutine's formal parameters to be
324declared by special syntax, separate from the procedural code of the
325subroutine body.  The formal parameter list is known as a I<signature>.
326
327This facility must be enabled before it can be used. It is enabled
328automatically by a C<use v5.36> (or higher) declaration, or more
329directly by C<use feature 'signatures'>, in the current scope.
330
331The signature is part of a subroutine's body.  Normally the body of a
332subroutine is simply a braced block of code, but when using a signature,
333the signature is a parenthesised list that goes immediately before the
334block, after any name or attributes.
335
336For example,
337
338    sub foo :lvalue ($x, $y = 1, @z) { .... }
339
340The signature declares lexical variables that are
341in scope for the block.  When the subroutine is called, the signature
342takes control first.  It populates the signature variables from the
343list of arguments that were passed.  If the argument list doesn't meet
344the requirements of the signature, then it will throw an exception.
345When the signature processing is complete, control passes to the block.
346
347Positional parameters are handled by simply naming scalar variables in
348the signature.  For example,
349
350    sub foo ($left, $right) {
351        return $left + $right;
352    }
353
354takes two positional parameters, which must be filled at runtime by
355two arguments.  By default the parameters are mandatory, and it is
356not permitted to pass more arguments than expected.  So the above is
357equivalent to
358
359    sub foo {
360        die "Too many arguments for subroutine" unless @_ <= 2;
361        die "Too few arguments for subroutine" unless @_ >= 2;
362        my $left = $_[0];
363        my $right = $_[1];
364        return $left + $right;
365    }
366
367An argument can be ignored by omitting the main part of the name from
368a parameter declaration, leaving just a bare C<$> sigil.  For example,
369
370    sub foo ($first, $, $third) {
371        return "first=$first, third=$third";
372    }
373
374Although the ignored argument doesn't go into a variable, it is still
375mandatory for the caller to pass it.
376
377A positional parameter is made optional by giving a default value,
378separated from the parameter name by C<=>:
379
380    sub foo ($left, $right = 0) {
381        return $left + $right;
382    }
383
384The above subroutine may be called with either one or two arguments.
385The default value expression is evaluated when the subroutine is called,
386so it may provide different default values for different calls.  It is
387only evaluated if the argument was actually omitted from the call.
388For example,
389
390    my $auto_id = 0;
391    sub foo ($thing, $id = $auto_id++) {
392        print "$thing has ID $id";
393    }
394
395automatically assigns distinct sequential IDs to things for which no
396ID was supplied by the caller.  A default value expression may also
397refer to parameters earlier in the signature, making the default for
398one parameter vary according to the earlier parameters.  For example,
399
400    sub foo ($first_name, $surname, $nickname = $first_name) {
401        print "$first_name $surname is known as \"$nickname\"";
402    }
403
404A default value expression can also be written using the C<//=> operator,
405where it will be evaluated and used if the caller omitted a value or the
406value provided was C<undef>.
407
408    sub foo ($name //= "world") {
409        print "Hello, $name";
410    }
411
412    foo(undef);  # will print "Hello, world"
413
414Similarly, the C<||=> operator can be used to provide a default
415expression to be used whenever the caller provided a false value (and
416remember that a missing or C<undef> value are also false).
417
418    sub foo ($x ||= 10) {
419        return 5 + $x;
420    }
421
422An optional parameter can be nameless just like a mandatory parameter.
423For example,
424
425    sub foo ($thing, $ = 1) {
426        print $thing;
427    }
428
429The parameter's default value will still be evaluated if the corresponding
430argument isn't supplied, even though the value won't be stored anywhere.
431This is in case evaluating it has important side effects.  However, it
432will be evaluated in void context, so if it doesn't have side effects
433and is not trivial it will generate a warning if the "void" warning
434category is enabled.  If a nameless optional parameter's default value
435is not important, it may be omitted just as the parameter's name was:
436
437    sub foo ($thing, $=) {
438        print $thing;
439    }
440
441Optional positional parameters must come after all mandatory positional
442parameters.  (If there are no mandatory positional parameters then an
443optional positional parameters can be the first thing in the signature.)
444If there are multiple optional positional parameters and not enough
445arguments are supplied to fill them all, they will be filled from left
446to right.
447
448After positional parameters, additional arguments may be captured in a
449slurpy parameter.  The simplest form of this is just an array variable:
450
451    sub foo ($filter, @inputs) {
452        print $filter->($_) foreach @inputs;
453    }
454
455With a slurpy parameter in the signature, there is no upper limit on how
456many arguments may be passed.  A slurpy array parameter may be nameless
457just like a positional parameter, in which case its only effect is to
458turn off the argument limit that would otherwise apply:
459
460    sub foo ($thing, @) {
461        print $thing;
462    }
463
464A slurpy parameter may instead be a hash, in which case the arguments
465available to it are interpreted as alternating keys and values.
466There must be as many keys as values: if there is an odd argument then
467an exception will be thrown.  Keys will be stringified, and if there are
468duplicates then the later instance takes precedence over the earlier,
469as with standard hash construction.
470
471    sub foo ($filter, %inputs) {
472        print $filter->($_, $inputs{$_}) foreach sort keys %inputs;
473    }
474
475A slurpy hash parameter may be nameless just like other kinds of
476parameter.  It still insists that the number of arguments available to
477it be even, even though they're not being put into a variable.
478
479    sub foo ($thing, %) {
480        print $thing;
481    }
482
483A slurpy parameter, either array or hash, must be the last thing in the
484signature.  It may follow mandatory and optional positional parameters;
485it may also be the only thing in the signature.  Slurpy parameters cannot
486have default values: if no arguments are supplied for them then you get
487an empty array or empty hash.
488
489A signature may be entirely empty, in which case all it does is check
490that the caller passed no arguments:
491
492    sub foo () {
493        return 123;
494    }
495
496Prior to Perl 5.36 these were considered experimental, and emitted a
497warning in the C<experimental::signatures> category. From Perl 5.36
498onwards this no longer happens, though the warning category still exists
499for back-compatibility with code that attempts to disable it with a
500statement such as:
501
502    no warnings 'experimental::signatures';
503
504In the current Perl implementation, when using a signature the arguments
505are still also available in the special array variable C<@_>.  However,
506accessing them via this array is now discouraged, and should not be
507relied upon in newly-written code as this ability may change in a future
508version.  Code that attempts to access the C<@_> array will produce
509warnings in the C<experimental::args_array_with_signatures> category when
510compiled:
511
512    sub f ($x) {
513        # This line emits the warning seen below
514        print "Arguments are @_";
515    }
516
517Z<>
518
519    Use of @_ in join or string with signatured subroutine is
520    experimental at ...
521
522There is a difference between the two ways of accessing the arguments:
523C<@_> I<aliases> the arguments, but the signature variables get
524I<copies> of the arguments.  So writing to a signature variable only
525changes that variable, and has no effect on the caller's variables, but
526writing to an element of C<@_> modifies whatever the caller used to
527supply that argument.
528
529There is a potential syntactic ambiguity between signatures and prototypes
530(see L</Prototypes>), because both start with an opening parenthesis and
531both can appear in some of the same places, such as just after the name
532in a subroutine declaration.  For historical reasons, when signatures
533are not enabled, any opening parenthesis in such a context will trigger
534very forgiving prototype parsing.  Most signatures will be interpreted
535as prototypes in those circumstances, but won't be valid prototypes.
536(A valid prototype cannot contain any alphabetic character.)  This will
537lead to somewhat confusing error messages.
538
539To avoid ambiguity, when signatures are enabled the special syntax
540for prototypes is disabled.  There is no attempt to guess whether a
541parenthesised group was intended to be a prototype or a signature.
542To give a subroutine a prototype under these circumstances, use a
543L<prototype attribute|attributes/Built-in Attributes>.  For example,
544
545    sub foo :prototype($) { $_[0] }
546
547It is entirely possible for a subroutine to have both a prototype and
548a signature.  They do different jobs: the prototype affects compilation
549of calls to the subroutine, and the signature puts argument values into
550lexical variables at runtime.  You can therefore write
551
552    sub foo :prototype($$) ($left, $right) {
553        return $left + $right;
554    }
555
556The prototype attribute, and any other attributes, must come before
557the signature.  The signature always immediately precedes the block of
558the subroutine's body.
559
560=head2 Private Variables via my()
561X<my> X<variable, lexical> X<lexical> X<lexical variable> X<scope, lexical>
562X<lexical scope> X<attributes, my>
563
564Synopsis:
565
566    my $foo;            # declare $foo lexically local
567    my (@wid, %get);    # declare list of variables local
568    my $foo = "flurp";  # declare $foo lexical, and init it
569    my @oof = @bar;     # declare @oof lexical, and init it
570    my $x : Foo = $y;   # similar, with an attribute applied
571
572B<WARNING>: The use of attribute lists on C<my> declarations is still
573evolving.  The current semantics and interface are subject to change.
574See L<attributes> and L<Attribute::Handlers>.
575
576The C<my> operator declares the listed variables to be lexically
577confined to the enclosing block, conditional
578(C<if>/C<unless>/C<elsif>/C<else>), loop
579(C<for>/C<foreach>/C<while>/C<until>/C<continue>), subroutine, C<eval>,
580or C<do>/C<require>/C<use>'d file.  If more than one value is listed, the
581list must be placed in parentheses.  All listed elements must be
582legal lvalues.  Only alphanumeric identifiers may be lexically
583scoped--magical built-ins like C<$/> must currently be C<local>ized
584with C<local> instead to limit their scope dynamically.
585
586Unlike global or package variables localized by the C<local> operator,
587lexical variables declared with C<my> are totally hidden from the outside
588world, including any called subroutines.  This is true if it's the same
589subroutine called from itself or elsewhere--every call gets its own copy.
590X<local>
591
592This doesn't mean that a C<my> variable declared in a statically
593enclosing lexical scope would be invisible.  Only dynamic scopes
594are cut off.   For example, the C<bumpx()> function below has access
595to the lexical $x variable because both the C<my> and the C<sub>
596occurred at the same scope, presumably file scope.
597
598    my $x = 10;
599    sub bumpx { $x++ }
600
601An C<eval()>, however, can see lexical variables of the scope it is
602being evaluated in, so long as the names aren't hidden by declarations within
603the C<eval()> itself.  See L<perlref>.
604X<eval, scope of>
605
606The parameter list to my() may be assigned to if desired, which allows you
607to initialize your variables.  (If no initializer is given for a
608particular variable, it is created with the undefined value.)  Commonly
609this is used to name input parameters to a subroutine.  Examples:
610
611    $arg = "fred";          # "global" variable
612    $n = cube_root(27);
613    print "$arg thinks the root is $n\n";
614    # outputs: fred thinks the root is 3
615
616    sub cube_root {
617        my $arg = shift;  # name doesn't matter
618        $arg **= 1/3;
619        return $arg;
620    }
621
622The C<my> is simply a modifier on something you might assign to.  So when
623you do assign to variables in its argument list, C<my> doesn't
624change whether those variables are viewed as a scalar or an array.  So
625
626    my ($foo) = <STDIN>;                # WRONG?
627    my @FOO = <STDIN>;
628
629both supply a list context to the right-hand side, while
630
631    my $foo = <STDIN>;
632
633supplies a scalar context.  But the following declares only one variable:
634
635    my $foo, $bar = 1;                  # WRONG
636
637That has the same effect as
638
639    my $foo;
640    $bar = 1;
641
642The declared variable is not introduced (is not visible) until after
643the current statement.  Thus,
644
645    my $x = $x;
646
647can be used to initialize a new $x with the value of the old $x, and
648the expression
649
650    my $x = 123 and $x == 123
651
652is false unless the old $x happened to have the value C<123>.
653
654Lexical scopes of control structures are not bounded precisely by the
655braces that delimit their controlled blocks; control expressions are
656part of that scope, too.  Thus in the loop
657
658    while (my $line = <>) {
659        $line = lc $line;
660    } continue {
661        print $line;
662    }
663
664the scope of $line extends from its declaration throughout the rest of
665the loop construct (including the C<continue> clause), but not beyond
666it.  Similarly, in the conditional
667
668    if ((my $answer = <STDIN>) =~ /^yes$/i) {
669        user_agrees();
670    } elsif ($answer =~ /^no$/i) {
671        user_disagrees();
672    } else {
673        chomp $answer;
674        die "'$answer' is neither 'yes' nor 'no'";
675    }
676
677the scope of $answer extends from its declaration through the rest
678of that conditional, including any C<elsif> and C<else> clauses,
679but not beyond it.  See L<perlsyn/"Simple Statements"> for information
680on the scope of variables in statements with modifiers.
681
682The C<foreach> loop defaults to scoping its index variable dynamically
683in the manner of C<local>.  However, if the index variable is
684prefixed with the keyword C<my>, or if there is already a lexical
685by that name in scope, then a new lexical is created instead.  Thus
686in the loop
687X<foreach> X<for>
688
689    for my $i (1, 2, 3) {
690        some_function();
691    }
692
693the scope of $i extends to the end of the loop, but not beyond it,
694rendering the value of $i inaccessible within C<some_function()>.
695X<foreach> X<for>
696
697Some users may wish to encourage the use of lexically scoped variables.
698As an aid to catching implicit uses to package variables,
699which are always global, if you say
700
701    use strict 'vars';
702
703then any variable mentioned from there to the end of the enclosing
704block must either refer to a lexical variable, be predeclared via
705C<our> or C<use vars>, or else must be fully qualified with the package name.
706A compilation error results otherwise.  An inner block may countermand
707this with C<no strict 'vars'>.
708
709A C<my> has both a compile-time and a run-time effect.  At compile
710time, the compiler takes notice of it.  The principal usefulness
711of this is to quiet C<use strict 'vars'>, but it is also essential
712for generation of closures as detailed in L<perlref>.  Actual
713initialization is delayed until run time, though, so it gets executed
714at the appropriate time, such as each time through a loop, for
715example.
716
717Variables declared with C<my> are not part of any package and are therefore
718never fully qualified with the package name.  In particular, you're not
719allowed to try to make a package variable (or other global) lexical:
720
721    my $pack::var;      # ERROR!  Illegal syntax
722
723In fact, a package or global variable is still accessible using the
724fully qualified C<::> notation even while a lexical of the same name
725is also visible:
726
727    package main;
728    our $x = 10;
729    my  $x = 20;
730    print "$x and $::x\n";
731
732That will print out C<20> and C<10>.
733
734You may declare C<my> variables at the outermost scope of a file
735to hide any such identifiers from the world outside that file.  This
736is similar in spirit to C's static variables when they are used at
737the file level.  To do this with a subroutine requires the use of
738a closure (an anonymous function that accesses enclosing lexicals).
739If you want to create a private subroutine that cannot be called
740from outside that block, it can declare a lexical variable containing
741an anonymous sub reference:
742
743    my $secret_version = '1.001-beta';
744    my $secret_sub = sub { print $secret_version };
745    $secret_sub->();
746
747As long as the reference is never returned by any function within the
748module, no outside module can see the subroutine, because its name is not in
749any package's symbol table.  Remember that it's not I<REALLY> called
750C<$some_pack::secret_version> or anything; it's just $secret_version,
751unqualified and unqualifiable.
752
753This does not work with object methods, however; all object methods
754have to be in the symbol table of some package to be found.  See
755L<perlref/"Function Templates"> for something of a work-around to
756this.
757
758=head2 Persistent Private Variables
759X<state> X<state variable> X<static> X<variable, persistent>
760X<variable, static> X<closure>
761
762There are two ways to build persistent private variables in Perl 5.10.
763First, you can simply use the C<state> feature.  Or, you can use closures,
764if you want to stay compatible with releases older than 5.10.
765
766=head3 Persistent variables via state()
767
768Beginning with Perl 5.10.0, you can declare variables with the C<state>
769keyword in place of C<my>.  For that to work, though, you must have
770enabled that feature beforehand, either by using the C<feature> pragma, or
771by using C<-E> on one-liners (see L<feature>).  Beginning with Perl 5.16,
772the C<CORE::state> form does not require the
773C<feature> pragma.
774
775The C<state> keyword creates a lexical variable (following the same scoping
776rules as C<my>) that persists from one subroutine call to the next.  If a
777state variable resides inside an anonymous subroutine, then each copy of
778the subroutine has its own copy of the state variable.  However, the value
779of the state variable will still persist between calls to the same copy of
780the anonymous subroutine.  (Don't forget that C<sub { ... }> creates a new
781subroutine each time it is executed.)
782
783For example, the following code maintains a private counter, incremented
784each time the gimme_another() function is called:
785
786    use feature 'state';
787    sub gimme_another { state $x; return ++$x }
788
789And this example uses anonymous subroutines to create separate counters:
790
791    use feature 'state';
792    sub create_counter {
793        return sub { state $x; return ++$x }
794    }
795
796Also, since C<$x> is lexical, it can't be reached or modified by any Perl
797code outside.
798
799When combined with variable declaration, simple assignment to C<state>
800variables (as in C<state $x = 42>) is executed only the first time.  When such
801statements are evaluated subsequent times, the assignment is ignored.  The
802behavior of assignment to C<state> declarations where the left hand side
803of the assignment involves any parentheses is currently undefined.
804
805=head3 Persistent variables with closures
806
807Just because a lexical variable is lexically (also called statically)
808scoped to its enclosing block, C<eval>, or C<do> FILE, this doesn't mean that
809within a function it works like a C static.  It normally works more
810like a C auto, but with implicit garbage collection.
811
812Unlike local variables in C or C++, Perl's lexical variables don't
813necessarily get recycled just because their scope has exited.
814If something more permanent is still aware of the lexical, it will
815stick around.  So long as something else references a lexical, that
816lexical won't be freed--which is as it should be.  You wouldn't want
817memory being free until you were done using it, or kept around once you
818were done.  Automatic garbage collection takes care of this for you.
819
820This means that you can pass back or save away references to lexical
821variables, whereas to return a pointer to a C auto is a grave error.
822It also gives us a way to simulate C's function statics.  Here's a
823mechanism for giving a function private variables with both lexical
824scoping and a static lifetime.  If you do want to create something like
825C's static variables, just enclose the whole function in an extra block,
826and put the static variable outside the function but in the block.
827
828    {
829        my $secret_val = 0;
830        sub gimme_another {
831            return ++$secret_val;
832        }
833    }
834    # $secret_val now becomes unreachable by the outside
835    # world, but retains its value between calls to gimme_another
836
837If this function is being sourced in from a separate file
838via C<require> or C<use>, then this is probably just fine.  If it's
839all in the main program, you'll need to arrange for the C<my>
840to be executed early, either by putting the whole block above
841your main program, or more likely, placing merely a C<BEGIN>
842code block around it to make sure it gets executed before your program
843starts to run:
844
845    BEGIN {
846        my $secret_val = 0;
847        sub gimme_another {
848            return ++$secret_val;
849        }
850    }
851
852See L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END"> about the
853special triggered code blocks, C<BEGIN>, C<UNITCHECK>, C<CHECK>,
854C<INIT> and C<END>.
855
856If declared at the outermost scope (the file scope), then lexicals
857work somewhat like C's file statics.  They are available to all
858functions in that same file declared below them, but are inaccessible
859from outside that file.  This strategy is sometimes used in modules
860to create private variables that the whole module can see.
861
862=head2 Temporary Values via local()
863X<local> X<scope, dynamic> X<dynamic scope> X<variable, local>
864X<variable, temporary>
865
866B<WARNING>: In general, you should be using C<my> instead of C<local>, because
867it's faster and safer.  Exceptions to this include the global punctuation
868variables, global filehandles and formats, and direct manipulation of the
869Perl symbol table itself.  C<local> is mostly used when the current value
870of a variable must be visible to called subroutines.
871
872Synopsis:
873
874    # localization of values
875
876    local $foo;                # make $foo dynamically local
877    local (@wid, %get);        # make list of variables local
878    local $foo = "flurp";      # make $foo dynamic, and init it
879    local @oof = @bar;         # make @oof dynamic, and init it
880
881    local $hash{key} = "val";  # sets a local value for this hash entry
882    delete local $hash{key};   # delete this entry for the current block
883    local ($cond ? $v1 : $v2); # several types of lvalues support
884                               # localization
885
886    # localization of symbols
887
888    local *FH;                 # localize $FH, @FH, %FH, &FH  ...
889    local *merlyn = *randal;   # now $merlyn is really $randal, plus
890                               #     @merlyn is really @randal, etc
891    local *merlyn = 'randal';  # SAME THING: promote 'randal' to *randal
892    local *merlyn = \$randal;  # just alias $merlyn, not @merlyn etc
893
894A C<local> modifies its listed variables to be "local" to the
895enclosing block, C<eval>, or C<do FILE>--and to I<any subroutine
896called from within that block>.  A C<local> just gives temporary
897values to global (meaning package) variables.  It does I<not> create
898a local variable.  This is known as dynamic scoping.  Lexical scoping
899is done with C<my>, which works more like C's auto declarations.
900
901Some types of lvalues can be localized as well: hash and array elements
902and slices, conditionals (provided that their result is always
903localizable), and symbolic references.  As for simple variables, this
904creates new, dynamically scoped values.
905
906If more than one variable or expression is given to C<local>, they must be
907placed in parentheses.  This operator works
908by saving the current values of those variables in its argument list on a
909hidden stack and restoring them upon exiting the block, subroutine, or
910eval.  This means that called subroutines can also reference the local
911variable, but not the global one.  The argument list may be assigned to if
912desired, which allows you to initialize your local variables.  (If no
913initializer is given for a particular variable, it is created with an
914undefined value.)
915
916Because C<local> is a run-time operator, it gets executed each time
917through a loop.  Consequently, it's more efficient to localize your
918variables outside the loop.
919
920=head3 Grammatical note on local()
921X<local, context>
922
923A C<local> is simply a modifier on an lvalue expression.  When you assign to
924a C<local>ized variable, the C<local> doesn't change whether its list is
925viewed as a scalar or an array.  So
926
927    local($foo) = <STDIN>;
928    local @FOO = <STDIN>;
929
930both supply a list context to the right-hand side, while
931
932    local $foo = <STDIN>;
933
934supplies a scalar context.
935
936=head3 Localization of special variables
937X<local, special variable>
938
939If you localize a special variable, you'll be giving a new value to it,
940but its magic won't go away.  That means that all side-effects related
941to this magic still work with the localized value.
942
943This feature allows code like this to work :
944
945    # Read the whole contents of FILE in $slurp
946    { local $/ = undef; $slurp = <FILE>; }
947
948Note, however, that this restricts localization of some values ; for
949example, the following statement dies, as of Perl 5.10.0, with an error
950I<Modification of a read-only value attempted>, because the $1 variable is
951magical and read-only :
952
953    local $1 = 2;
954
955One exception is the default scalar variable: starting with Perl 5.14
956C<local($_)> will always strip all magic from $_, to make it possible
957to safely reuse $_ in a subroutine.
958
959B<WARNING>: Localization of tied arrays and hashes does not currently
960work as described.
961This will be fixed in a future release of Perl; in the meantime, avoid
962code that relies on any particular behavior of localising tied arrays
963or hashes (localising individual elements is still okay).
964See L<perl58delta/"Localising Tied Arrays and Hashes Is Broken"> for more
965details.
966X<local, tie>
967
968=head3 Localization of globs
969X<local, glob> X<glob>
970
971The construct
972
973    local *name;
974
975creates a whole new symbol table entry for the glob C<name> in the
976current package.  That means that all variables in its glob slot ($name,
977@name, %name, &name, and the C<name> filehandle) are dynamically reset.
978
979This implies, among other things, that any magic eventually carried by
980those variables is locally lost.  In other words, saying C<local */>
981will not have any effect on the internal value of the input record
982separator.
983
984=head3 Localization of elements of composite types
985X<local, composite type element> X<local, array element>
986X<local, hash element>
987
988It's also worth taking a moment to explain what happens when you
989C<local>ize a member of a composite type (i.e. an array or hash element).
990In this case, the element is C<local>ized I<by name>.  This means that
991when the scope of the C<local()> ends, the saved value will be
992restored to the hash element whose key was named in the C<local()>, or
993the array element whose index was named in the C<local()>.  If that
994element was deleted while the C<local()> was in effect (e.g. by a
995C<delete()> from a hash or a C<shift()> of an array), it will spring
996back into existence, possibly extending an array and filling in the
997skipped elements with C<undef>.  For instance, if you say
998
999    %hash = ( 'This' => 'is', 'a' => 'test' );
1000    @ary  = ( 0..5 );
1001    {
1002        local($ary[5]) = 6;
1003        local($hash{'a'}) = 'drill';
1004        while (my $e = pop(@ary)) {
1005            print "$e . . .\n";
1006            last unless $e > 3;
1007        }
1008        if (@ary) {
1009            $hash{'only a'} = 'test';
1010            delete $hash{'a'};
1011        }
1012    }
1013    print join(' ', map { "$_ $hash{$_}" } sort keys %hash),".\n";
1014    print "The array has ",scalar(@ary)," elements: ",
1015        join(', ', map { defined $_ ? $_ : 'undef' } @ary),"\n";
1016
1017Perl will print
1018
1019    6 . . .
1020    4 . . .
1021    3 . . .
1022    This is a test only a test.
1023    The array has 6 elements: 0, 1, 2, undef, undef, 5
1024
1025The behavior of local() on non-existent members of composite
1026types is subject to change in future. The behavior of local()
1027on array elements specified using negative indexes is particularly
1028surprising, and is very likely to change.
1029
1030=head3 Localized deletion of elements of composite types
1031X<delete> X<local, composite type element> X<local, array element>
1032X<local, hash element>
1033
1034You can use the C<delete local $array[$idx]> and C<delete local $hash{key}>
1035constructs to delete a composite type entry for the current block and restore
1036it when it ends.  They return the array/hash value before the localization,
1037which means that they are respectively equivalent to
1038
1039    do {
1040        my $val = $array[$idx];
1041        local  $array[$idx];
1042        delete $array[$idx];
1043        $val
1044    }
1045
1046and
1047
1048    do {
1049        my $val = $hash{key};
1050        local  $hash{key};
1051        delete $hash{key};
1052        $val
1053    }
1054
1055except that for those the C<local> is
1056scoped to the C<do> block.  Slices are
1057also accepted.
1058
1059    my %hash = (
1060        a => [ 7, 8, 9 ],
1061        b => 1,
1062    )
1063
1064    {
1065        my $x = delete local $hash{a};
1066        # $x is [ 7, 8, 9 ]
1067        # %hash is (b => 1)
1068
1069        {
1070            my @nums = delete local @$x[0, 2]
1071            # @nums is (7, 9)
1072            # $x is [ undef, 8 ]
1073
1074            $x[0] = 999; # will be erased when the scope ends
1075        }
1076        # $x is back to [ 7, 8, 9 ]
1077
1078    }
1079    # %hash is back to its original state
1080
1081This construct is supported since Perl v5.12.
1082
1083=head2 Lvalue subroutines
1084X<lvalue> X<subroutine, lvalue>
1085
1086It is possible to return a modifiable value from a subroutine.
1087To do this, you have to declare the subroutine to return an lvalue.
1088
1089    my $val;
1090    sub canmod : lvalue {
1091        $val;  # or:  return $val;
1092    }
1093    sub nomod {
1094        $val;
1095    }
1096
1097    canmod() = 5;   # assigns to $val
1098    nomod()  = 5;   # ERROR
1099
1100The scalar/list context for the subroutine and for the right-hand
1101side of assignment is determined as if the subroutine call is replaced
1102by a scalar.  For example, consider:
1103
1104    data(2,3) = get_data(3,4);
1105
1106Both subroutines here are called in a scalar context, while in:
1107
1108    (data(2,3)) = get_data(3,4);
1109
1110and in:
1111
1112    (data(2),data(3)) = get_data(3,4);
1113
1114all the subroutines are called in a list context.
1115
1116Lvalue subroutines are convenient, but you have to keep in mind that,
1117when used with objects, they may violate encapsulation.  A normal
1118mutator can check the supplied argument before setting the attribute
1119it is protecting, an lvalue subroutine cannot.  If you require any
1120special processing when storing and retrieving the values, consider
1121using the CPAN module Sentinel or something similar.
1122
1123=head2 Lexical Subroutines
1124X<my sub> X<state sub> X<our sub> X<subroutine, lexical>
1125
1126Beginning with Perl 5.18, you can declare a private subroutine with C<my>
1127or C<state>.  As with state variables, the C<state> keyword is only
1128available under C<use feature 'state'> or C<use v5.10> or higher.
1129
1130Prior to Perl 5.26, lexical subroutines were deemed experimental and were
1131available only under the C<use feature 'lexical_subs'> pragma.  They also
1132produced a warning unless the "experimental::lexical_subs" warnings
1133category was disabled.
1134
1135These subroutines are only visible within the block in which they are
1136declared, and only after that declaration:
1137
1138    # Include these two lines if your code is intended to run under Perl
1139    # versions earlier than 5.26.
1140    no warnings "experimental::lexical_subs";
1141    use feature 'lexical_subs';
1142
1143    foo();              # calls the package/global subroutine
1144    state sub foo {
1145        foo();          # also calls the package subroutine
1146    }
1147    foo();              # calls "state" sub
1148    my $ref = \&foo;    # take a reference to "state" sub
1149
1150    my sub bar { ... }
1151    bar();              # calls "my" sub
1152
1153You can't (directly) write a recursive lexical subroutine:
1154
1155    # WRONG
1156    my sub baz {
1157        baz();
1158    }
1159
1160This example fails because C<baz()> refers to the package/global subroutine
1161C<baz>, not the lexical subroutine currently being defined.
1162
1163The solution is to use L<C<__SUB__>|perlfunc/__SUB__>:
1164
1165    my sub baz {
1166        __SUB__->();    # calls itself
1167    }
1168
1169It is possible to predeclare a lexical subroutine.  The C<sub foo {...}>
1170subroutine definition syntax respects any previous C<my sub;> or C<state sub;>
1171declaration.  Using this to define recursive subroutines is a bad idea,
1172however:
1173
1174    my sub baz;         # predeclaration
1175    sub baz {           # define the "my" sub
1176        baz();          # WRONG: calls itself, but leaks memory
1177    }
1178
1179Just like C<< my $f; $f = sub { $f->() } >>, this example leaks memory.  The
1180name C<baz> is a reference to the subroutine, and the subroutine uses the name
1181C<baz>; they keep each other alive (see L<perlref/Circular References>).
1182
1183=head3 C<state sub> vs C<my sub>
1184
1185What is the difference between "state" subs and "my" subs?  Each time that
1186execution enters a block when "my" subs are declared, a new copy of each
1187sub is created.  "State" subroutines persist from one execution of the
1188containing block to the next.
1189
1190So, in general, "state" subroutines are faster.  But "my" subs are
1191necessary if you want to create closures:
1192
1193    sub whatever {
1194        my $x = shift;
1195        my sub inner {
1196            ... do something with $x ...
1197        }
1198        inner();
1199    }
1200
1201In this example, a new C<$x> is created when C<whatever> is called, and
1202also a new C<inner>, which can see the new C<$x>.  A "state" sub will only
1203see the C<$x> from the first call to C<whatever>.
1204
1205=head3 C<our> subroutines
1206
1207Like C<our $variable>, C<our sub> creates a lexical alias to the package
1208subroutine of the same name.
1209
1210The two main uses for this are to switch back to using the package sub
1211inside an inner scope:
1212
1213    sub foo { ... }
1214
1215    sub bar {
1216        my sub foo { ... }
1217        {
1218            # need to use the outer foo here
1219            our sub foo;
1220            foo();
1221        }
1222    }
1223
1224and to make a subroutine visible to other packages in the same scope:
1225
1226    package MySneakyModule;
1227
1228    our sub do_something { ... }
1229
1230    sub do_something_with_caller {
1231        package DB;
1232        () = caller 1;          # sets @DB::args
1233        do_something(@args);    # uses MySneakyModule::do_something
1234    }
1235
1236=head2 Passing Symbol Table Entries (typeglobs)
1237X<typeglob> X<*>
1238
1239B<WARNING>: The mechanism described in this section was originally
1240the only way to simulate pass-by-reference in older versions of
1241Perl.  While it still works fine in modern versions, the new reference
1242mechanism is generally easier to work with.  See below.
1243
1244Sometimes you don't want to pass the value of an array to a subroutine
1245but rather the name of it, so that the subroutine can modify the global
1246copy of it rather than working with a local copy.  In Perl you can
1247refer to all objects of a particular name by prefixing the name
1248with a star: C<*foo>.  This is often known as a "typeglob", because the
1249star on the front can be thought of as a wildcard match for all the
1250funny prefix characters on variables and subroutines and such.
1251
1252When evaluated, the typeglob produces a scalar value that represents
1253all the objects of that name, including any filehandle, format, or
1254subroutine.  When assigned to, it causes the name mentioned to refer to
1255whatever C<*> value was assigned to it.  Example:
1256
1257    sub doubleary {
1258        local(*someary) = @_;
1259        foreach $elem (@someary) {
1260            $elem *= 2;
1261        }
1262    }
1263    doubleary(*foo);
1264    doubleary(*bar);
1265
1266Scalars are already passed by reference, so you can modify
1267scalar arguments without using this mechanism by referring explicitly
1268to C<$_[0]> etc.  You can modify all the elements of an array by passing
1269all the elements as scalars, but you have to use the C<*> mechanism (or
1270the equivalent reference mechanism) to C<push>, C<pop>, or change the size of
1271an array.  It will certainly be faster to pass the typeglob (or reference).
1272
1273Even if you don't want to modify an array, this mechanism is useful for
1274passing multiple arrays in a single LIST, because normally the LIST
1275mechanism will merge all the array values so that you can't extract out
1276the individual arrays.  For more on typeglobs, see
1277L<perldata/"Typeglobs and Filehandles">.
1278
1279=head2 When to Still Use local()
1280X<local> X<variable, local>
1281
1282Despite the existence of C<my>, there are still three places where the
1283C<local> operator still shines.  In fact, in these three places, you
1284I<must> use C<local> instead of C<my>.
1285
1286=over 4
1287
1288=item 1.
1289
1290You need to give a global variable a temporary value, especially $_.
1291
1292The global variables, like C<@ARGV> or the punctuation variables, must be
1293C<local>ized with C<local()>.  This block reads in F</etc/motd>, and splits
1294it up into chunks separated by lines of equal signs, which are placed
1295in C<@Fields>.
1296
1297    {
1298        local @ARGV = ("/etc/motd");
1299        local $/ = undef;
1300        local $_ = <>;
1301        @Fields = split /^\s*=+\s*$/;
1302    }
1303
1304It particular, it's important to C<local>ize $_ in any routine that assigns
1305to it.  Look out for implicit assignments in C<while> conditionals.
1306
1307=item 2.
1308
1309You need to create a local file or directory handle or a local function.
1310
1311A function that needs a filehandle of its own must use
1312C<local()> on a complete typeglob.   This can be used to create new symbol
1313table entries:
1314
1315    sub ioqueue {
1316        local  (*READER, *WRITER);    # not my!
1317        pipe    (READER,  WRITER)     or die "pipe: $!";
1318        return (*READER, *WRITER);
1319    }
1320    ($head, $tail) = ioqueue();
1321
1322See the Symbol module for a way to create anonymous symbol table
1323entries.
1324
1325Because assignment of a reference to a typeglob creates an alias, this
1326can be used to create what is effectively a local function, or at least,
1327a local alias.
1328
1329    {
1330        local *grow = \&shrink; # only until this block exits
1331        grow();                # really calls shrink()
1332        move();                # if move() grow()s, it shrink()s too
1333    }
1334    grow();                    # get the real grow() again
1335
1336See L<perlref/"Function Templates"> for more about manipulating
1337functions by name in this way.
1338
1339=item 3.
1340
1341You want to temporarily change just one element of an array or hash.
1342
1343You can C<local>ize just one element of an aggregate.  Usually this
1344is done on dynamics:
1345
1346    {
1347        local $SIG{INT} = 'IGNORE';
1348        funct();                            # uninterruptible
1349    }
1350    # interruptibility automatically restored here
1351
1352But it also works on lexically declared aggregates.
1353
1354=back
1355
1356=head2 Pass by Reference
1357X<pass by reference> X<pass-by-reference> X<reference>
1358
1359If you want to pass more than one array or hash into a function--or
1360return them from it--and have them maintain their integrity, then
1361you're going to have to use an explicit pass-by-reference.  Before you
1362do that, you need to understand references as detailed in L<perlref>.
1363This section may not make much sense to you otherwise.
1364
1365Here are a few simple examples.  First, let's pass in several arrays
1366to a function and have it C<pop> all of then, returning a new list
1367of all their former last elements:
1368
1369    @tailings = popmany ( \@w, \@x, \@y, \@z );
1370
1371    sub popmany {
1372        my $aref;
1373        my @retlist;
1374        foreach $aref ( @_ ) {
1375            push @retlist, pop @$aref;
1376        }
1377        return @retlist;
1378    }
1379
1380Here's how you might write a function that returns a
1381list of keys occurring in all the hashes passed to it:
1382
1383    @common = inter( \%foo, \%bar, \%joe );
1384    sub inter {
1385        my ($k, $href, %seen); # locals
1386        foreach $href (@_) {
1387            while ( $k = each %$href ) {
1388                $seen{$k}++;
1389            }
1390        }
1391        return grep { $seen{$_} == @_ } keys %seen;
1392    }
1393
1394So far, we're using just the normal list return mechanism.
1395What happens if you want to pass or return a hash?  Well,
1396if you're using only one of them, or you don't mind them
1397concatenating, then the normal calling convention is ok, although
1398a little expensive.
1399
1400Where people get into trouble is here:
1401
1402    (@w, @x) = func(@y, @z);
1403or
1404    (%w, %x) = func(%y, %z);
1405
1406That syntax simply won't work.  It sets just C<@w> or C<%w> and
1407clears the C<@x> or C<%x>.  Plus the function didn't get passed
1408into two separate arrays or hashes: it got one long list in C<@_>,
1409as always.
1410
1411If you can arrange for everyone to deal with this through references, it's
1412cleaner code, although not so nice to look at.  Here's a function that
1413takes two array references as arguments, returning the two array elements
1414in order of how many elements they have in them:
1415
1416    ($wref, $xref) = func(\@y, \@z);
1417    print "@$wref has more than @$xref\n";
1418    sub func {
1419        my ($yref, $zref) = @_;
1420        if (@$yref > @$zref) {
1421            return ($yref, $zref);
1422        } else {
1423            return ($zref, $yref);
1424        }
1425    }
1426
1427It turns out that you can actually do this also:
1428
1429    (*w, *x) = func(\@y, \@z);
1430    print "@w has more than @x\n";
1431    sub func {
1432        local (*y, *z) = @_;
1433        if (@y > @z) {
1434            return (\@y, \@z);
1435        } else {
1436            return (\@z, \@y);
1437        }
1438    }
1439
1440Here we're using the typeglobs to do symbol table aliasing.  It's
1441a tad subtle, though, and also won't work if you're using C<my>
1442variables, because only globals (even in disguise as C<local>s)
1443are in the symbol table.
1444
1445If you're passing around filehandles, you could usually just use the bare
1446typeglob, like C<*STDOUT>, but typeglobs references work, too.
1447For example:
1448
1449    splutter(\*STDOUT);
1450    sub splutter {
1451        my $fh = shift;
1452        print $fh "her um well a hmmm\n";
1453    }
1454
1455    $rec = get_rec(\*STDIN);
1456    sub get_rec {
1457        my $fh = shift;
1458        return scalar <$fh>;
1459    }
1460
1461If you're planning on generating new filehandles, you could do this.
1462Notice to pass back just the bare *FH, not its reference.
1463
1464    sub openit {
1465        my $path = shift;
1466        local *FH;
1467        return open (FH, $path) ? *FH : undef;
1468    }
1469
1470=head2 Prototypes
1471X<prototype> X<subroutine, prototype>
1472
1473Perl supports a very limited kind of compile-time argument checking
1474using function prototyping.  This can be declared in either the PROTO
1475section or with a L<prototype attribute|attributes/Built-in Attributes>.
1476If you declare either of
1477
1478    sub mypush (\@@)
1479    sub mypush :prototype(\@@)
1480
1481then C<mypush()> takes arguments exactly like C<push()> does.
1482
1483If subroutine signatures are enabled (see L</Signatures>), then
1484the shorter PROTO syntax is unavailable, because it would clash with
1485signatures.  In that case, a prototype can only be declared in the form
1486of an attribute.
1487
1488The
1489function declaration must be visible at compile time.  The prototype
1490affects only interpretation of regular calls to the function,
1491where regular is defined as not using the C<&> sigil.  In
1492other words, if you call it like a built-in function, then it behaves
1493like a built-in function.  If you call it like an old-fashioned (perl4)
1494subroutine, then it behaves like an old-fashioned subroutine.  It
1495naturally falls out from this rule that prototypes have no influence
1496on subroutine references like C<\&foo> or on indirect subroutine
1497calls like C<&{$subref}()> or C<< $subref->() >>.
1498
1499Method calls are not influenced by prototypes either, because the
1500function to be called is indeterminate at compile time, since
1501the exact code called depends on inheritance.
1502
1503Because the intent of this feature is primarily to let you define
1504subroutines that work like built-in functions, here are prototypes
1505for some other functions that parse almost exactly like the
1506corresponding built-in.
1507
1508    Declared as             Called as
1509
1510    sub mylink ($$)         mylink $old, $new
1511    sub myvec ($$$)         myvec $var, $offset, 1
1512    sub myindex ($$;$)      myindex getstring(), "substr"
1513    sub mysyswrite ($$$;$)  mysyswrite $buf, 0, length($buf) - $off, $off
1514    sub myreverse (@)       myreverse $x, $y, $z
1515    sub myjoin ($@)         myjoin ":", $x, $y, $z
1516    sub mypop (\@)          mypop @array
1517    sub mysplice (\@$$@)    mysplice @array, 0, 2, @pushme
1518    sub mykeys (\[%@])      mykeys $hashref->%*
1519    sub myopen (*;$)        myopen HANDLE, $name
1520    sub mypipe (**)         mypipe READHANDLE, WRITEHANDLE
1521    sub mygrep (&@)         mygrep { /foo/ } $x, $y, $z
1522    sub myrand (;$)         myrand 42
1523    sub mytime ()           mytime
1524
1525Any backslashed prototype character represents an actual argument
1526that must start with that character (optionally preceded by C<my>,
1527C<our> or C<local>), with the exception of C<$>, which will
1528accept any scalar lvalue expression, such as C<$foo = 7> or
1529C<< my_function()->[0] >>.  The value passed as part of C<@_> will be a
1530reference to the actual argument given in the subroutine call,
1531obtained by applying C<\> to that argument.
1532
1533You can use the C<\[]> backslash group notation to specify more than one
1534allowed argument type.  For example:
1535
1536    sub myref (\[$@%&*])
1537
1538will allow calling myref() as
1539
1540    myref $var
1541    myref @array
1542    myref %hash
1543    myref &sub
1544    myref *glob
1545
1546and the first argument of myref() will be a reference to
1547a scalar, an array, a hash, a subroutine, or a glob.
1548
1549Unbackslashed prototype characters have special meanings.  Any
1550unbackslashed C<@> or C<%> eats all remaining arguments, and forces
1551list context.  An argument represented by C<$> forces scalar context.  An
1552C<&> requires an anonymous subroutine, which, if passed as the first
1553argument, may look like a bare block:  It does not require the C<sub> keyword
1554or a subsequent comma.
1555
1556A C<*> allows the subroutine to accept a bareword, constant, scalar expression,
1557typeglob, or a reference to a typeglob in that slot.  The value will be
1558available to the subroutine either as a simple scalar, or (in the latter
1559two cases) as a reference to the typeglob.  If you wish to always convert
1560such arguments to a typeglob reference, use Symbol::qualify_to_ref() as
1561follows:
1562
1563    use Symbol 'qualify_to_ref';
1564
1565    sub foo (*) {
1566        my $fh = qualify_to_ref(shift, caller);
1567        ...
1568    }
1569
1570The C<+> prototype is a special alternative to C<$> that will act like
1571C<\[@%]> when given a literal array or hash variable, but will otherwise
1572force scalar context on the argument.  This is useful for functions which
1573should accept either a literal array or an array reference as the argument:
1574
1575    sub mypush (+@) {
1576        my $aref = shift;
1577        die "Not an array or arrayref" unless ref $aref eq 'ARRAY';
1578        push @$aref, @_;
1579    }
1580
1581When using the C<+> prototype, your function must check that the argument
1582is of an acceptable type.
1583
1584A semicolon (C<;>) separates mandatory arguments from optional arguments.
1585It is redundant before C<@> or C<%>, which gobble up everything else.
1586
1587As the last character of a prototype, or just before a semicolon, a C<@>
1588or a C<%>, you can use C<_> in place of C<$>: if this argument is not
1589provided, C<$_> will be used instead.
1590
1591Note how the last three examples in the table above are treated
1592specially by the parser.  C<mygrep()> is parsed as a true list
1593operator, C<myrand()> is parsed as a true unary operator with unary
1594precedence the same as C<rand()>, and C<mytime()> is truly without
1595arguments, just like C<time()>.  That is, if you say
1596
1597    mytime +2;
1598
1599you'll get C<mytime() + 2>, not C<mytime(2)>, which is how it would be parsed
1600without a prototype.  If you want to force a unary function to have the
1601same precedence as a list operator, add C<;> to the end of the prototype:
1602
1603    sub mygetprotobynumber($;);
1604    mygetprotobynumber $x > $y; # parsed as mygetprotobynumber($x > $y)
1605
1606The interesting thing about C<&> is that you can generate new syntax with it,
1607provided it's in the initial position:
1608X<&>
1609
1610    sub try (&@) {
1611        my($try,$catch) = @_;
1612        eval { &$try };
1613        if ($@) {
1614            local $_ = $@;
1615            &$catch;
1616        }
1617    }
1618    sub catch (&) { $_[0] }
1619
1620    try {
1621        die "phooey";
1622    } catch {
1623        /phooey/ and print "unphooey\n";
1624    };
1625
1626That prints C<"unphooey">.  (Yes, there are still unresolved
1627issues having to do with visibility of C<@_>.  I'm ignoring that
1628question for the moment.  (But note that if we make C<@_> lexically
1629scoped, those anonymous subroutines can act like closures... (Gee,
1630is this sounding a little Lispish?  (Never mind.))))
1631
1632And here's a reimplementation of the Perl C<grep> operator:
1633X<grep>
1634
1635    sub mygrep (&@) {
1636        my $code = shift;
1637        my @result;
1638        foreach $_ (@_) {
1639            push(@result, $_) if &$code;
1640        }
1641        @result;
1642    }
1643
1644Some folks would prefer full alphanumeric prototypes.  Alphanumerics have
1645been intentionally left out of prototypes for the express purpose of
1646someday in the future adding named, formal parameters.  The current
1647mechanism's main goal is to let module writers provide better diagnostics
1648for module users.  Larry feels the notation quite understandable to Perl
1649programmers, and that it will not intrude greatly upon the meat of the
1650module, nor make it harder to read.  The line noise is visually
1651encapsulated into a small pill that's easy to swallow.
1652
1653If you try to use an alphanumeric sequence in a prototype you will
1654generate an optional warning - "Illegal character in prototype...".
1655Unfortunately earlier versions of Perl allowed the prototype to be
1656used as long as its prefix was a valid prototype.  The warning may be
1657upgraded to a fatal error in a future version of Perl once the
1658majority of offending code is fixed.
1659
1660It's probably best to prototype new functions, not retrofit prototyping
1661into older ones.  That's because you must be especially careful about
1662silent impositions of differing list versus scalar contexts.  For example,
1663if you decide that a function should take just one parameter, like this:
1664
1665    sub func ($) {
1666        my $n = shift;
1667        print "you gave me $n\n";
1668    }
1669
1670and someone has been calling it with an array or expression
1671returning a list:
1672
1673    func(@foo);
1674    func( $text =~ /\w+/g );
1675
1676Then you've just supplied an automatic C<scalar> in front of their
1677argument, which can be more than a bit surprising.  The old C<@foo>
1678which used to hold one thing doesn't get passed in.  Instead,
1679C<func()> now gets passed in a C<1>; that is, the number of elements
1680in C<@foo>.  And the C<m//g> gets called in scalar context so instead of a
1681list of words it returns a boolean result and advances C<pos($text)>.  Ouch!
1682
1683If a sub has both a PROTO and a BLOCK, the prototype is not applied
1684until after the BLOCK is completely defined.  This means that a recursive
1685function with a prototype has to be predeclared for the prototype to take
1686effect, like so:
1687
1688    sub foo($$);
1689    sub foo($$) {
1690        foo 1, 2;
1691    }
1692
1693This is all very powerful, of course, and should be used only in moderation
1694to make the world a better place.
1695
1696=head2 Constant Functions
1697X<constant>
1698
1699Functions with a prototype of C<()> are potential candidates for
1700inlining.  If the result after optimization and constant folding
1701is either a constant or a lexically-scoped scalar which has no other
1702references, then it will be used in place of function calls made
1703without C<&>.  Calls made using C<&> are never inlined.  (See
1704L<constant> for an easy way to declare most constants.)
1705
1706The following functions would all be inlined:
1707
1708    sub pi ()           { 3.14159 }             # Not exact, but close.
1709    sub PI ()           { 4 * atan2 1, 1 }      # As good as it gets,
1710                                                # and it's inlined, too!
1711    sub ST_DEV ()       { 0 }
1712    sub ST_INO ()       { 1 }
1713
1714    sub FLAG_FOO ()     { 1 << 8 }
1715    sub FLAG_BAR ()     { 1 << 9 }
1716    sub FLAG_MASK ()    { FLAG_FOO | FLAG_BAR }
1717
1718    sub OPT_BAZ ()      { not (0x1B58 & FLAG_MASK) }
1719
1720    sub N () { int(OPT_BAZ) / 3 }
1721
1722    sub FOO_SET () { 1 if FLAG_MASK & FLAG_FOO }
1723    sub FOO_SET2 () { if (FLAG_MASK & FLAG_FOO) { 1 } }
1724
1725(Be aware that the last example was not always inlined in Perl 5.20 and
1726earlier, which did not behave consistently with subroutines containing
1727inner scopes.)  You can countermand inlining by using an explicit
1728C<return>:
1729
1730    sub baz_val () {
1731        if (OPT_BAZ) {
1732            return 23;
1733        }
1734        else {
1735            return 42;
1736        }
1737    }
1738    sub bonk_val () { return 12345 }
1739
1740As alluded to earlier you can also declare inlined subs dynamically at
1741BEGIN time if their body consists of a lexically-scoped scalar which
1742has no other references.  Only the first example here will be inlined:
1743
1744    BEGIN {
1745        my $var = 1;
1746        no strict 'refs';
1747        *INLINED = sub () { $var };
1748    }
1749
1750    BEGIN {
1751        my $var = 1;
1752        my $ref = \$var;
1753        no strict 'refs';
1754        *NOT_INLINED = sub () { $var };
1755    }
1756
1757A not so obvious caveat with this (see [RT #79908]) is what happens if the
1758variable is potentially modifiable. For example:
1759
1760    BEGIN {
1761        my $x = 10;
1762        *FOO = sub () { $x };
1763        $x++;
1764    }
1765    print FOO(); # printed 10 prior to 5.32.0
1766
1767From Perl 5.22 onwards this gave a deprecation warning, and from Perl 5.32
1768onwards it became a run-time error. Previously the variable was
1769immediately inlined, and stopped behaving like a normal lexical variable;
1770so it printed C<10>, not C<11>.
1771
1772If you still want such a subroutine to be inlined (with no warning), make
1773sure the variable is not used in a context where it could be modified
1774aside from where it is declared.
1775
1776    # Fine, no warning
1777    BEGIN {
1778        my $x = 54321;
1779        *INLINED = sub () { $x };
1780    }
1781    # Error
1782    BEGIN {
1783        my $x;
1784        $x = 54321;
1785        *ALSO_INLINED = sub () { $x };
1786    }
1787
1788Perl 5.22 also introduced the "const" attribute as an alternative.  It was
1789initially experimental, but made stable in Perl 5.40.  When applied to an
1790anonymous subroutine, it forces the sub to be called when the C<sub>
1791expression is evaluated.  The return value is captured and turned into a
1792constant subroutine:
1793
1794    my $x = 54321;
1795    *INLINED = sub : const { $x };
1796    $x++;
1797
1798The return value of C<INLINED> in this example will always be 54321,
1799regardless of later modifications to $x.  You can also put any arbitrary
1800code inside the sub, at it will be executed immediately and its return
1801value captured the same way.
1802
1803If you really want a subroutine with a C<()> prototype that returns a
1804lexical variable you can easily force it to not be inlined by adding
1805an explicit C<return>:
1806
1807    BEGIN {
1808        my $x = 10;
1809        *FOO = sub () { return $x };
1810        $x++;
1811    }
1812    print FOO(); # prints 11
1813
1814The easiest way to tell if a subroutine was inlined is by using
1815L<B::Deparse>.  Consider this example of two subroutines returning
1816C<1>, one with a C<()> prototype causing it to be inlined, and one
1817without (with deparse output truncated for clarity):
1818
1819    $ perl -MO=Deparse -e 'sub ONE { 1 } if (ONE) { print ONE if ONE }'
1820    sub ONE {
1821        1;
1822    }
1823    if (ONE ) {
1824        print ONE() if ONE ;
1825    }
1826
1827    $ perl -MO=Deparse -e 'sub ONE () { 1 } if (ONE) { print ONE if ONE }'
1828    sub ONE () { 1 }
1829    do {
1830        print 1
1831    };
1832
1833If you redefine a subroutine that was eligible for inlining, you'll
1834get a warning by default.  You can use this warning to tell whether or
1835not a particular subroutine is considered inlinable, since it's
1836different than the warning for overriding non-inlined subroutines:
1837
1838    $ perl -e 'sub one () {1} sub one () {2}'
1839    Constant subroutine one redefined at -e line 1.
1840    $ perl -we 'sub one {1} sub one {2}'
1841    Subroutine one redefined at -e line 1.
1842
1843The warning is considered severe enough not to be affected by the
1844B<-w> switch (or its absence) because previously compiled invocations
1845of the function will still be using the old value of the function.  If
1846you need to be able to redefine the subroutine, you need to ensure
1847that it isn't inlined, either by dropping the C<()> prototype (which
1848changes calling semantics, so beware) or by thwarting the inlining
1849mechanism in some other way, e.g. by adding an explicit C<return>, as
1850mentioned above:
1851
1852    sub not_inlined () { return 23 }
1853
1854=head2 Overriding Built-in Functions
1855X<built-in> X<override> X<CORE> X<CORE::GLOBAL>
1856
1857Many built-in functions may be overridden, though this should be tried
1858only occasionally and for good reason.  Typically this might be
1859done by a package attempting to emulate missing built-in functionality
1860on a non-Unix system.
1861
1862Overriding may be done only by importing the name from a module at
1863compile time--ordinary predeclaration isn't good enough.  However, the
1864C<use subs> pragma lets you, in effect, predeclare subs
1865via the import syntax, and these names may then override built-in ones:
1866
1867    use subs 'chdir', 'chroot', 'chmod', 'chown';
1868    chdir $somewhere;
1869    sub chdir { ... }
1870
1871To unambiguously refer to the built-in form, precede the
1872built-in name with the special package qualifier C<CORE::>.  For example,
1873saying C<CORE::open()> always refers to the built-in C<open()>, even
1874if the current package has imported some other subroutine called
1875C<&open()> from elsewhere.  Even though it looks like a regular
1876function call, it isn't: the C<CORE::> prefix in that case is part of Perl's
1877syntax, and works for any keyword, regardless of what is in the C<CORE>
1878package.  Taking a reference to it, that is, C<\&CORE::open>, only works
1879for some keywords.  See L<CORE>.
1880
1881Library modules should not in general export built-in names like C<open>
1882or C<chdir> as part of their default C<@EXPORT> list, because these may
1883sneak into someone else's namespace and change the semantics unexpectedly.
1884Instead, if the module adds that name to C<@EXPORT_OK>, then it's
1885possible for a user to import the name explicitly, but not implicitly.
1886That is, they could say
1887
1888    use Module 'open';
1889
1890and it would import the C<open> override.  But if they said
1891
1892    use Module;
1893
1894they would get the default imports without overrides.
1895
1896The foregoing mechanism for overriding built-in is restricted, quite
1897deliberately, to the package that requests the import.  There is a second
1898method that is sometimes applicable when you wish to override a built-in
1899everywhere, without regard to namespace boundaries.  This is achieved by
1900importing a sub into the special namespace C<CORE::GLOBAL::>.  Here is an
1901example that quite brazenly replaces the C<glob> operator with something
1902that understands regular expressions.
1903
1904    package REGlob;
1905    require Exporter;
1906    @ISA = 'Exporter';
1907    @EXPORT_OK = 'glob';
1908
1909    sub import {
1910        my $pkg = shift;
1911        return unless @_;
1912        my $sym = shift;
1913        my $where = ($sym =~ s/^GLOBAL_// ? 'CORE::GLOBAL' : caller(0));
1914        $pkg->export($where, $sym, @_);
1915    }
1916
1917    sub glob {
1918        my $pat = shift;
1919        my @got;
1920        if (opendir my $d, '.') {
1921            @got = grep /$pat/, readdir $d;
1922            closedir $d;
1923        }
1924        return @got;
1925    }
1926    1;
1927
1928And here's how it could be (ab)used:
1929
1930    #use REGlob 'GLOBAL_glob';      # override glob() in ALL namespaces
1931    package Foo;
1932    use REGlob 'glob';              # override glob() in Foo:: only
1933    print for <^[a-z_]+\.pm\$>;     # show all pragmatic modules
1934
1935The initial comment shows a contrived, even dangerous example.
1936By overriding C<glob> globally, you would be forcing the new (and
1937subversive) behavior for the C<glob> operator for I<every> namespace,
1938without the complete cognizance or cooperation of the modules that own
1939those namespaces.  Naturally, this should be done with extreme caution--if
1940it must be done at all.
1941
1942The C<REGlob> example above does not implement all the support needed to
1943cleanly override Perl's C<glob> operator.  The built-in C<glob> has
1944different behaviors depending on whether it appears in a scalar or list
1945context, but our C<REGlob> doesn't.  Indeed, many Perl built-ins have such
1946context sensitive behaviors, and these must be adequately supported by
1947a properly written override.  For a fully functional example of overriding
1948C<glob>, study the implementation of C<File::DosGlob> in the standard
1949library.
1950
1951When you override a built-in, your replacement should be consistent (if
1952possible) with the built-in native syntax.  You can achieve this by using
1953a suitable prototype.  To get the prototype of an overridable built-in,
1954use the C<prototype> function with an argument of C<"CORE::builtin_name">
1955(see L<perlfunc/prototype>).
1956
1957Note however that some built-ins can't have their syntax expressed by a
1958prototype (such as C<system> or C<chomp>).  If you override them you won't
1959be able to fully mimic their original syntax.
1960
1961The built-ins C<do>, C<require> and C<glob> can also be overridden, but due
1962to special magic, their original syntax is preserved, and you don't have
1963to define a prototype for their replacements.  (You can't override the
1964C<do BLOCK> syntax, though).
1965
1966C<require> has special additional dark magic: if you invoke your
1967C<require> replacement as C<require Foo::Bar>, it will actually receive
1968the argument C<"Foo/Bar.pm"> in @_.  See L<perlfunc/require>.
1969
1970And, as you'll have noticed from the previous example, if you override
1971C<glob>, the C<< <*> >> glob operator is overridden as well.
1972
1973In a similar fashion, overriding the C<readline> function also overrides
1974the equivalent I/O operator C<< <FILEHANDLE> >>.  Also, overriding
1975C<readpipe> also overrides the operators C<``> and C<qx//>.
1976
1977Finally, some built-ins (e.g. C<exists> or C<grep>) can't be overridden.
1978
1979=head2 Autoloading
1980X<autoloading> X<AUTOLOAD>
1981
1982If you call a subroutine that is undefined, you would ordinarily
1983get an immediate, fatal error complaining that the subroutine doesn't
1984exist.  (Likewise for subroutines being used as methods, when the
1985method doesn't exist in any base class of the class's package.)
1986However, if an C<AUTOLOAD> subroutine is defined in the package or
1987packages used to locate the original subroutine, then that
1988C<AUTOLOAD> subroutine is called with the arguments that would have
1989been passed to the original subroutine.  The fully qualified name
1990of the original subroutine magically appears in the global $AUTOLOAD
1991variable of the same package as the C<AUTOLOAD> routine.  The name
1992is not passed as an ordinary argument because, er, well, just
1993because, that's why.  (As an exception, a method call to a nonexistent
1994C<import> or C<unimport> method is just skipped instead.  Also, if
1995the AUTOLOAD subroutine is an XSUB, there are other ways to retrieve the
1996subroutine name.  See L<perlguts/Autoloading with XSUBs> for details.)
1997
1998
1999Many C<AUTOLOAD> routines load in a definition for the requested
2000subroutine using eval(), then execute that subroutine using a special
2001form of goto() that erases the stack frame of the C<AUTOLOAD> routine
2002without a trace.  (See the source to the standard module documented
2003in L<AutoLoader>, for example.)  But an C<AUTOLOAD> routine can
2004also just emulate the routine and never define it.   For example,
2005let's pretend that a function that wasn't defined should just invoke
2006C<system> with those arguments.  All you'd do is:
2007
2008    sub AUTOLOAD {
2009        our $AUTOLOAD;              # keep 'use strict' happy
2010        my $program = $AUTOLOAD;
2011        $program =~ s/.*:://;
2012        system($program, @_);
2013    }
2014    date();
2015    who();
2016    ls('-l');
2017
2018In fact, if you predeclare functions you want to call that way, you don't
2019even need parentheses:
2020
2021    use subs qw(date who ls);
2022    date;
2023    who;
2024    ls '-l';
2025
2026A more complete example of this is the Shell module on CPAN, which
2027can treat undefined subroutine calls as calls to external programs.
2028
2029Mechanisms are available to help modules writers split their modules
2030into autoloadable files.  See the standard AutoLoader module
2031described in L<AutoLoader> and in L<AutoSplit>, the standard
2032SelfLoader modules in L<SelfLoader>, and the document on adding C
2033functions to Perl code in L<perlxs>.
2034
2035=head2 Subroutine Attributes
2036X<attribute> X<subroutine, attribute> X<attrs>
2037
2038A subroutine declaration or definition may have a list of attributes
2039associated with it.  If such an attribute list is present, it is
2040broken up at space or colon boundaries and treated as though a
2041C<use attributes> had been seen.  See L<attributes> for details
2042about what attributes are currently supported.
2043Unlike the limitation with the obsolescent C<use attrs>, the
2044C<sub : ATTRLIST> syntax works to associate the attributes with
2045a pre-declaration, and not just with a subroutine definition.
2046
2047The attributes must be valid as simple identifier names (without any
2048punctuation other than the '_' character).  They may have a parameter
2049list appended, which is only checked for whether its parentheses ('(',')')
2050nest properly.
2051
2052Examples of valid syntax (even though the attributes are unknown):
2053
2054    sub fnord (&\%) : switch(10,foo(7,3))  :  expensive;
2055    sub plugh () : Ugly('\(") :Bad;
2056    sub xyzzy : _5x5 { ... }
2057
2058Examples of invalid syntax:
2059
2060    sub fnord : switch(10,foo();    # ()-string not balanced
2061    sub snoid : Ugly('(');          # ()-string not balanced
2062    sub xyzzy : 5x5;                # "5x5" not a valid identifier
2063    sub plugh : Y2::north;          # "Y2::north" not a simple identifier
2064    sub snurt : foo + bar;          # "+" not a colon or space
2065
2066The attribute list is passed as a list of constant strings to the code
2067which associates them with the subroutine.  In particular, the second example
2068of valid syntax above currently looks like this in terms of how it's
2069parsed and invoked:
2070
2071    use attributes __PACKAGE__, \&plugh, q[Ugly('\(")], 'Bad';
2072
2073For further details on attribute lists and their manipulation,
2074see L<attributes> and L<Attribute::Handlers>.
2075
2076=head1 SEE ALSO
2077
2078See L<perlref/"Function Templates"> for more about references and closures.
2079See L<perlxs> if you'd like to learn about calling C subroutines from Perl.
2080See L<perlembed> if you'd like to learn about calling Perl subroutines from C.
2081See L<perlmod> to learn about bundling up your functions in separate files.
2082See L<perlmodlib> to learn what library modules come standard on your system.
2083See L<perlootut> to learn how to make object method calls.
2084
2085=for vi
2086# ex: set sts=0 sw=4 et:
2087