⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.124
Server IP:
50.28.103.30
Server:
Linux host.jcukjv-lwsites.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
Server Software:
nginx/1.28.0
PHP Version:
8.3.12
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
perl5
/
pod
/
Edit File: perlsub.pod
=head1 NAME X
X
perlsub - Perl subroutines =head1 SYNOPSIS To declare subroutines: X
X
sub NAME; # A "forward" declaration. sub NAME(PROTO); # ditto, but with prototypes sub NAME : ATTRS; # with attributes sub NAME(PROTO) : ATTRS; # with attributes and prototypes sub NAME BLOCK # A declaration and a definition. sub NAME(PROTO) BLOCK # ditto, but with prototypes sub NAME(SIG) BLOCK # with a signature instead sub NAME : ATTRS BLOCK # with attributes sub NAME(PROTO) : ATTRS BLOCK # with prototypes and attributes sub NAME(SIG) : ATTRS BLOCK # with a signature and attributes To define an anonymous subroutine at runtime: X
$subref = sub BLOCK; # no proto $subref = sub (PROTO) BLOCK; # with proto $subref = sub (SIG) BLOCK; # with signature $subref = sub : ATTRS BLOCK; # with attributes $subref = sub (PROTO) : ATTRS BLOCK; # with proto and attributes $subref = sub (SIG) : ATTRS BLOCK; # with signature and attributes To import subroutines: X
use MODULE qw(NAME1 NAME2 NAME3); To call subroutines: X
X
NAME(LIST); # & is optional with parentheses. NAME LIST; # Parentheses optional if predeclared/imported. &NAME(LIST); # Circumvent prototypes. &NAME; # Makes current @_ visible to called subroutine. =head1 DESCRIPTION Like many languages, Perl provides for user-defined subroutines. These may be located anywhere in the main program, loaded in from other files via the C
, C
, or C
keywords, or generated on the fly using C
or anonymous subroutines. You can even call a function indirectly using a variable containing its name or a CODE reference. The Perl model for function call and return values is simple: all functions are passed as parameters one single flat list of scalars, and all functions likewise return to their caller one single flat list of scalars. Any arrays or hashes in these call and return lists will collapse, losing their identities--but you may always use pass-by-reference instead to avoid this. Both call and return lists may contain as many or as few scalar elements as you'd like. (Often a function without an explicit return statement is called a subroutine, but there's really no difference from Perl's perspective.) X
X
Any arguments passed in show up in the array C<@_>. (They may also show up in lexical variables introduced by a signature; see L below.) Therefore, if you called a function with two arguments, those would be stored in C<$_[0]> and C<$_[1]>. The array C<@_> is a local array, but its elements are aliases for the actual scalar parameters. In particular, if an element C<$_[0]> is updated, the corresponding argument is updated (or an error occurs if it is not updatable). If an argument is an array or hash element which did not exist when the function was called, that element is created only when (and if) it is modified or a reference to it is taken. (Some earlier versions of Perl created the element whether or not the element was assigned to.) Assigning to the whole array C<@_> removes that aliasing, and does not update any arguments. X
X
X<@_> A C
statement may be used to exit a subroutine, optionally specifying the returned value, which will be evaluated in the appropriate context (list, scalar, or void) depending on the context of the subroutine call. If you specify no return value, the subroutine returns an empty list in list context, the undefined value in scalar context, or nothing in void context. If you return one or more aggregates (arrays and hashes), these will be flattened together into one large indistinguishable list. If no C
is found and if the last statement is an expression, its value is returned. If the last statement is a loop control structure like a C
or a C
, the returned value is unspecified. The empty sub returns the empty list. X
X
X
Aside from an experimental facility (see L below), Perl does not have named formal parameters. In practice all you do is assign to a C
list of these. Variables that aren't declared to be private are global variables. For gory details on creating private variables, see L"Private Variables via my()"> and L"Temporary Values via local()">. To create protected environments for a set of functions in a separate package (and probably a separate file), see L
. X
X
Example: sub max { my $max = shift(@_); foreach $foo (@_) { $max = $foo if $max < $foo; } return $max; } $bestday = max($mon,$tue,$wed,$thu,$fri); Example: # get a line, combining continuation lines # that start with whitespace sub get_line { $thisline = $lookahead; # global variables! LINE: while (defined($lookahead =
)) { if ($lookahead =~ /^[ \t]/) { $thisline .= $lookahead; } else { last LINE; } } return $thisline; } $lookahead =
; # get first line while (defined($line = get_line())) { ... } Assigning to a list of private variables to name your arguments: sub maybeset { my($key, $value) = @_; $Foo{$key} = $value unless $Foo{$key}; } Because the assignment copies the values, this also has the effect of turning call-by-reference into call-by-value. Otherwise a function is free to do in-place modifications of C<@_> and change its caller's values. X
X
upcase_in($v1, $v2); # this changes $v1 and $v2 sub upcase_in { for (@_) { tr/a-z/A-Z/ } } You aren't allowed to modify constants in this way, of course. If an argument were actually literal and you tried to change it, you'd take a (presumably fatal) exception. For example, this won't work: X
X
upcase_in("frederick"); It would be much safer if the C
function were written to return a copy of its parameters instead of changing them in place: ($v3, $v4) = upcase($v1, $v2); # this doesn't change $v1 and $v2 sub upcase { return unless defined wantarray; # void context, do nothing my @parms = @_; for (@parms) { tr/a-z/A-Z/ } return wantarray ? @parms : $parms[0]; } Notice how this (unprototyped) function doesn't care whether it was passed real scalars or arrays. Perl sees all arguments as one big, long, flat parameter list in C<@_>. This is one area where Perl's simple argument-passing style shines. The C
function would work perfectly well without changing the C
definition even if we fed it things like this: @newlist = upcase(@list1, @list2); @newlist = upcase( split /:/, $var ); Do not, however, be tempted to do this: (@a, @b) = upcase(@list1, @list2); Like the flattened incoming parameter list, the return list is also flattened on return. So all you have managed to do here is stored everything in C<@a> and made C<@b> empty. See L for alternatives. A subroutine may be called using an explicit C<&> prefix. The C<&> is optional in modern Perl, as are parentheses if the subroutine has been predeclared. The C<&> is I
optional when just naming the subroutine, such as when it's used as an argument to defined() or undef(). Nor is it optional when you want to do an indirect subroutine call with a subroutine name or reference using the C<&$subref()> or C<&{$subref}()> constructs, although the C<< $subref->() >> notation solves that problem. See L
for more about all that. X<&> Subroutines may be called recursively. If a subroutine is called using the C<&> form, the argument list is optional, and if omitted, no C<@_> array is set up for the subroutine: the C<@_> array at the time of the call is visible to subroutine instead. This is an efficiency mechanism that new users may wish to avoid. X
&foo(1,2,3); # pass three arguments foo(1,2,3); # the same foo(); # pass a null list &foo(); # the same &foo; # foo() get current args, like foo(@_) !! foo; # like foo() IFF sub foo predeclared, else "foo" Not only does the C<&> form make the argument list optional, it also disables any prototype checking on arguments you do provide. This is partly for historical reasons, and partly for having a convenient way to cheat if you know what you're doing. See L below. X<&> Since Perl 5.16.0, the C<__SUB__> token is available under C
and C
. It will evaluate to a reference to the currently-running sub, which allows for recursive calls without knowing your subroutine's name. use 5.16.0; my $factorial = sub { my ($x) = @_; return 1 if $x == 1; return($x * __SUB__->( $x - 1 ) ); }; The behavior of C<__SUB__> within a regex code block (such as C(?{...})/>) is subject to change. Subroutines whose names are in all upper case are reserved to the Perl core, as are modules whose names are in all lower case. A subroutine in all capitals is a loosely-held convention meaning it will be called indirectly by the run-time system itself, usually due to a triggered event. Subroutines whose name start with a left parenthesis are also reserved the same way. The following is a list of some subroutines that currently do special, pre-defined things. =over =item documented later in this document C
=item documented in L
C
, C
=item documented in L
C
, C
=item documented in L
C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
=item documented in L
C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
, C
=item documented in L
L<< C
| perlfunc/use >>, L<< C
| perlfunc/use >>, L<< C
| perlfunc/require >> =item documented in L
C
=item documented in L
C
, C
, C
, C
, C
=item undocumented, used internally by the L
feature any starting with C<(> =back The C
, C
, C
, C
and C
subroutines are not so much subroutines as named special code blocks, of which you can have more than one in a package, and which you can B
call explicitly. See L
=head2 Signatures B
: Subroutine signatures are experimental. The feature may be modified or removed in future versions of Perl. Perl has an experimental facility to allow a subroutine's formal parameters to be introduced by special syntax, separate from the procedural code of the subroutine body. The formal parameter list is known as a I
. The facility must be enabled first by a pragmatic declaration, C
, and it will produce a warning unless the "experimental::signatures" warnings category is disabled. The signature is part of a subroutine's body. Normally the body of a subroutine is simply a braced block of code. When using a signature, the signature is a parenthesised list that goes immediately after the subroutine name (or, for anonymous subroutines, immediately after the C
keyword). The signature declares lexical variables that are in scope for the block. When the subroutine is called, the signature takes control first. It populates the signature variables from the list of arguments that were passed. If the argument list doesn't meet the requirements of the signature, then it will throw an exception. When the signature processing is complete, control passes to the block. Positional parameters are handled by simply naming scalar variables in the signature. For example, sub foo ($left, $right) { return $left + $right; } takes two positional parameters, which must be filled at runtime by two arguments. By default the parameters are mandatory, and it is not permitted to pass more arguments than expected. So the above is equivalent to sub foo { die "Too many arguments for subroutine" unless @_ <= 2; die "Too few arguments for subroutine" unless @_ >= 2; my $left = $_[0]; my $right = $_[1]; return $left + $right; } An argument can be ignored by omitting the main part of the name from a parameter declaration, leaving just a bare C<$> sigil. For example, sub foo ($first, $, $third) { return "first=$first, third=$third"; } Although the ignored argument doesn't go into a variable, it is still mandatory for the caller to pass it. A positional parameter is made optional by giving a default value, separated from the parameter name by C<=>: sub foo ($left, $right = 0) { return $left + $right; } The above subroutine may be called with either one or two arguments. The default value expression is evaluated when the subroutine is called, so it may provide different default values for different calls. It is only evaluated if the argument was actually omitted from the call. For example, my $auto_id = 0; sub foo ($thing, $id = $auto_id++) { print "$thing has ID $id"; } automatically assigns distinct sequential IDs to things for which no ID was supplied by the caller. A default value expression may also refer to parameters earlier in the signature, making the default for one parameter vary according to the earlier parameters. For example, sub foo ($first_name, $surname, $nickname = $first_name) { print "$first_name $surname is known as \"$nickname\""; } An optional parameter can be nameless just like a mandatory parameter. For example, sub foo ($thing, $ = 1) { print $thing; } The parameter's default value will still be evaluated if the corresponding argument isn't supplied, even though the value won't be stored anywhere. This is in case evaluating it has important side effects. However, it will be evaluated in void context, so if it doesn't have side effects and is not trivial it will generate a warning if the "void" warning category is enabled. If a nameless optional parameter's default value is not important, it may be omitted just as the parameter's name was: sub foo ($thing, $=) { print $thing; } Optional positional parameters must come after all mandatory positional parameters. (If there are no mandatory positional parameters then an optional positional parameters can be the first thing in the signature.) If there are multiple optional positional parameters and not enough arguments are supplied to fill them all, they will be filled from left to right. After positional parameters, additional arguments may be captured in a slurpy parameter. The simplest form of this is just an array variable: sub foo ($filter, @inputs) { print $filter->($_) foreach @inputs; } With a slurpy parameter in the signature, there is no upper limit on how many arguments may be passed. A slurpy array parameter may be nameless just like a positional parameter, in which case its only effect is to turn off the argument limit that would otherwise apply: sub foo ($thing, @) { print $thing; } A slurpy parameter may instead be a hash, in which case the arguments available to it are interpreted as alternating keys and values. There must be as many keys as values: if there is an odd argument then an exception will be thrown. Keys will be stringified, and if there are duplicates then the later instance takes precedence over the earlier, as with standard hash construction. sub foo ($filter, %inputs) { print $filter->($_, $inputs{$_}) foreach sort keys %inputs; } A slurpy hash parameter may be nameless just like other kinds of parameter. It still insists that the number of arguments available to it be even, even though they're not being put into a variable. sub foo ($thing, %) { print $thing; } A slurpy parameter, either array or hash, must be the last thing in the signature. It may follow mandatory and optional positional parameters; it may also be the only thing in the signature. Slurpy parameters cannot have default values: if no arguments are supplied for them then you get an empty array or empty hash. A signature may be entirely empty, in which case all it does is check that the caller passed no arguments: sub foo () { return 123; } When using a signature, the arguments are still available in the special array variable C<@_>, in addition to the lexical variables of the signature. There is a difference between the two ways of accessing the arguments: C<@_> I
the arguments, but the signature variables get I
of the arguments. So writing to a signature variable only changes that variable, and has no effect on the caller's variables, but writing to an element of C<@_> modifies whatever the caller used to supply that argument. There is a potential syntactic ambiguity between signatures and prototypes (see L), because both start with an opening parenthesis and both can appear in some of the same places, such as just after the name in a subroutine declaration. For historical reasons, when signatures are not enabled, any opening parenthesis in such a context will trigger very forgiving prototype parsing. Most signatures will be interpreted as prototypes in those circumstances, but won't be valid prototypes. (A valid prototype cannot contain any alphabetic character.) This will lead to somewhat confusing error messages. To avoid ambiguity, when signatures are enabled the special syntax for prototypes is disabled. There is no attempt to guess whether a parenthesised group was intended to be a prototype or a signature. To give a subroutine a prototype under these circumstances, use a L
. For example, sub foo :prototype($) { $_[0] } It is entirely possible for a subroutine to have both a prototype and a signature. They do different jobs: the prototype affects compilation of calls to the subroutine, and the signature puts argument values into lexical variables at runtime. You can therefore write sub foo ($left, $right) : prototype($$) { return $left + $right; } The prototype attribute, and any other attributes, come after the signature. =head2 Private Variables via my() X
X
X
X
X
X
X
Synopsis: my $foo; # declare $foo lexically local my (@wid, %get); # declare list of variables local my $foo = "flurp"; # declare $foo lexical, and init it my @oof = @bar; # declare @oof lexical, and init it my $x : Foo = $y; # similar, with an attribute applied B
: The use of attribute lists on C
declarations is still evolving. The current semantics and interface are subject to change. See L
and L
. The C
operator declares the listed variables to be lexically confined to the enclosing block, conditional (C
/C
/C
/C
), loop (C
/C
/C
/C
/C
), subroutine, C
, or C
/C
/C
'd file. If more than one value is listed, the list must be placed in parentheses. All listed elements must be legal lvalues. Only alphanumeric identifiers may be lexically scoped--magical built-ins like C<$/> must currently be C
ized with C
instead. Unlike dynamic variables created by the C
operator, lexical variables declared with C
are totally hidden from the outside world, including any called subroutines. This is true if it's the same subroutine called from itself or elsewhere--every call gets its own copy. X
This doesn't mean that a C
variable declared in a statically enclosing lexical scope would be invisible. Only dynamic scopes are cut off. For example, the C
function below has access to the lexical $x variable because both the C
and the C
occurred at the same scope, presumably file scope. my $x = 10; sub bumpx { $x++ } An C
, however, can see lexical variables of the scope it is being evaluated in, so long as the names aren't hidden by declarations within the C
itself. See L
. X
The parameter list to my() may be assigned to if desired, which allows you to initialize your variables. (If no initializer is given for a particular variable, it is created with the undefined value.) Commonly this is used to name input parameters to a subroutine. Examples: $arg = "fred"; # "global" variable $n = cube_root(27); print "$arg thinks the root is $n\n"; fred thinks the root is 3 sub cube_root { my $arg = shift; # name doesn't matter $arg **= 1/3; return $arg; } The C
is simply a modifier on something you might assign to. So when you do assign to variables in its argument list, C
doesn't change whether those variables are viewed as a scalar or an array. So my ($foo) =
; # WRONG? my @FOO =
; both supply a list context to the right-hand side, while my $foo =
; supplies a scalar context. But the following declares only one variable: my $foo, $bar = 1; # WRONG That has the same effect as my $foo; $bar = 1; The declared variable is not introduced (is not visible) until after the current statement. Thus, my $x = $x; can be used to initialize a new $x with the value of the old $x, and the expression my $x = 123 and $x == 123 is false unless the old $x happened to have the value C<123>. Lexical scopes of control structures are not bounded precisely by the braces that delimit their controlled blocks; control expressions are part of that scope, too. Thus in the loop while (my $line = <>) { $line = lc $line; } continue { print $line; } the scope of $line extends from its declaration throughout the rest of the loop construct (including the C
clause), but not beyond it. Similarly, in the conditional if ((my $answer =
) =~ /^yes$/i) { user_agrees(); } elsif ($answer =~ /^no$/i) { user_disagrees(); } else { chomp $answer; die "'$answer' is neither 'yes' nor 'no'"; } the scope of $answer extends from its declaration through the rest of that conditional, including any C
and C
clauses, but not beyond it. See L
for information on the scope of variables in statements with modifiers. The C
loop defaults to scoping its index variable dynamically in the manner of C
. However, if the index variable is prefixed with the keyword C
, or if there is already a lexical by that name in scope, then a new lexical is created instead. Thus in the loop X
X
for my $i (1, 2, 3) { some_function(); } the scope of $i extends to the end of the loop, but not beyond it, rendering the value of $i inaccessible within C
. X
X
Some users may wish to encourage the use of lexically scoped variables. As an aid to catching implicit uses to package variables, which are always global, if you say use strict 'vars'; then any variable mentioned from there to the end of the enclosing block must either refer to a lexical variable, be predeclared via C
or C
, or else must be fully qualified with the package name. A compilation error results otherwise. An inner block may countermand this with C
. A C
has both a compile-time and a run-time effect. At compile time, the compiler takes notice of it. The principal usefulness of this is to quiet C
, but it is also essential for generation of closures as detailed in L
. Actual initialization is delayed until run time, though, so it gets executed at the appropriate time, such as each time through a loop, for example. Variables declared with C
are not part of any package and are therefore never fully qualified with the package name. In particular, you're not allowed to try to make a package variable (or other global) lexical: my $pack::var; # ERROR! Illegal syntax In fact, a dynamic variable (also known as package or global variables) are still accessible using the fully qualified C<::> notation even while a lexical of the same name is also visible: package main; local $x = 10; my $x = 20; print "$x and $::x\n"; That will print out C<20> and C<10>. You may declare C
variables at the outermost scope of a file to hide any such identifiers from the world outside that file. This is similar in spirit to C's static variables when they are used at the file level. To do this with a subroutine requires the use of a closure (an anonymous function that accesses enclosing lexicals). If you want to create a private subroutine that cannot be called from outside that block, it can declare a lexical variable containing an anonymous sub reference: my $secret_version = '1.001-beta'; my $secret_sub = sub { print $secret_version }; &$secret_sub(); As long as the reference is never returned by any function within the module, no outside module can see the subroutine, because its name is not in any package's symbol table. Remember that it's not I
called C<$some_pack::secret_version> or anything; it's just $secret_version, unqualified and unqualifiable. This does not work with object methods, however; all object methods have to be in the symbol table of some package to be found. See L
for something of a work-around to this. =head2 Persistent Private Variables X
X
X
X
X
X
There are two ways to build persistent private variables in Perl 5.10. First, you can simply use the C
feature. Or, you can use closures, if you want to stay compatible with releases older than 5.10. =head3 Persistent variables via state() Beginning with Perl 5.10.0, you can declare variables with the C
keyword in place of C
. For that to work, though, you must have enabled that feature beforehand, either by using the C
pragma, or by using C<-E> on one-liners (see L
). Beginning with Perl 5.16, the C
form does not require the C
pragma. The C
keyword creates a lexical variable (following the same scoping rules as C
) that persists from one subroutine call to the next. If a state variable resides inside an anonymous subroutine, then each copy of the subroutine has its own copy of the state variable. However, the value of the state variable will still persist between calls to the same copy of the anonymous subroutine. (Don't forget that C
creates a new subroutine each time it is executed.) For example, the following code maintains a private counter, incremented each time the gimme_another() function is called: use feature 'state'; sub gimme_another { state $x; return ++$x } And this example uses anonymous subroutines to create separate counters: use feature 'state'; sub create_counter { return sub { state $x; return ++$x } } Also, since C<$x> is lexical, it can't be reached or modified by any Perl code outside. When combined with variable declaration, simple scalar assignment to C
variables (as in C
) is executed only the first time. When such statements are evaluated subsequent times, the assignment is ignored. The behavior of this sort of assignment to non-scalar variables is undefined. =head3 Persistent variables with closures Just because a lexical variable is lexically (also called statically) scoped to its enclosing block, C
, or C
FILE, this doesn't mean that within a function it works like a C static. It normally works more like a C auto, but with implicit garbage collection. Unlike local variables in C or C++, Perl's lexical variables don't necessarily get recycled just because their scope has exited. If something more permanent is still aware of the lexical, it will stick around. So long as something else references a lexical, that lexical won't be freed--which is as it should be. You wouldn't want memory being free until you were done using it, or kept around once you were done. Automatic garbage collection takes care of this for you. This means that you can pass back or save away references to lexical variables, whereas to return a pointer to a C auto is a grave error. It also gives us a way to simulate C's function statics. Here's a mechanism for giving a function private variables with both lexical scoping and a static lifetime. If you do want to create something like C's static variables, just enclose the whole function in an extra block, and put the static variable outside the function but in the block. { my $secret_val = 0; sub gimme_another { return ++$secret_val; } } # $secret_val now becomes unreachable by the outside # world, but retains its value between calls to gimme_another If this function is being sourced in from a separate file via C
or C
, then this is probably just fine. If it's all in the main program, you'll need to arrange for the C
to be executed early, either by putting the whole block above your main program, or more likely, placing merely a C
code block around it to make sure it gets executed before your program starts to run: BEGIN { my $secret_val = 0; sub gimme_another { return ++$secret_val; } } See L
about the special triggered code blocks, C
, C
, C
, C
and C
. If declared at the outermost scope (the file scope), then lexicals work somewhat like C's file statics. They are available to all functions in that same file declared below them, but are inaccessible from outside that file. This strategy is sometimes used in modules to create private variables that the whole module can see. =head2 Temporary Values via local() X
X
X
X
X
B
: In general, you should be using C
instead of C
, because it's faster and safer. Exceptions to this include the global punctuation variables, global filehandles and formats, and direct manipulation of the Perl symbol table itself. C
is mostly used when the current value of a variable must be visible to called subroutines. Synopsis: # localization of values local $foo; # make $foo dynamically local local (@wid, %get); # make list of variables local local $foo = "flurp"; # make $foo dynamic, and init it local @oof = @bar; # make @oof dynamic, and init it local $hash{key} = "val"; # sets a local value for this hash entry delete local $hash{key}; # delete this entry for the current block local ($cond ? $v1 : $v2); # several types of lvalues support # localization # localization of symbols local *FH; # localize $FH, @FH, %FH, &FH ... local *merlyn = *randal; # now $merlyn is really $randal, plus # @merlyn is really @randal, etc local *merlyn = 'randal'; # SAME THING: promote 'randal' to *randal local *merlyn = \$randal; # just alias $merlyn, not @merlyn etc A C
modifies its listed variables to be "local" to the enclosing block, C
, or C
--and to I
. A C
just gives temporary values to global (meaning package) variables. It does I
create a local variable. This is known as dynamic scoping. Lexical scoping is done with C
, which works more like C's auto declarations. Some types of lvalues can be localized as well: hash and array elements and slices, conditionals (provided that their result is always localizable), and symbolic references. As for simple variables, this creates new, dynamically scoped values. If more than one variable or expression is given to C
, they must be placed in parentheses. This operator works by saving the current values of those variables in its argument list on a hidden stack and restoring them upon exiting the block, subroutine, or eval. This means that called subroutines can also reference the local variable, but not the global one. The argument list may be assigned to if desired, which allows you to initialize your local variables. (If no initializer is given for a particular variable, it is created with an undefined value.) Because C
is a run-time operator, it gets executed each time through a loop. Consequently, it's more efficient to localize your variables outside the loop. =head3 Grammatical note on local() X
A C
is simply a modifier on an lvalue expression. When you assign to a C
ized variable, the C
doesn't change whether its list is viewed as a scalar or an array. So local($foo) =
; local @FOO =
; both supply a list context to the right-hand side, while local $foo =