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