[dummy merge]
[p5sagit/p5-mst-13.2.git] / pod / perlsub.pod
1 =head1 NAME
2
3 perlsub - Perl subroutines
4
5 =head1 SYNOPSIS
6
7 To declare subroutines:
8
9     sub NAME;             # A "forward" declaration.
10     sub NAME(PROTO);      #  ditto, but with prototypes
11
12     sub NAME BLOCK        # A declaration and a definition.
13     sub NAME(PROTO) BLOCK #  ditto, but with prototypes
14
15 To define an anonymous subroutine at runtime:
16
17     $subref = sub BLOCK;
18
19 To import subroutines:
20
21     use PACKAGE qw(NAME1 NAME2 NAME3);
22
23 To call subroutines:
24
25     NAME(LIST);    # & is optional with parentheses.
26     NAME LIST;     # Parentheses optional if pre-declared/imported.
27     &NAME;         # Passes current @_ to subroutine.
28
29 =head1 DESCRIPTION
30
31 Like many languages, Perl provides for user-defined subroutines.  These
32 may be located anywhere in the main program, loaded in from other files
33 via the C<do>, C<require>, or C<use> keywords, or even generated on the
34 fly using C<eval> or anonymous subroutines (closures).  You can even call
35 a function indirectly using a variable containing its name or a CODE reference
36 to it, as in C<$var = \&function>.
37
38 The Perl model for function call and return values is simple: all
39 functions are passed as parameters one single flat list of scalars, and
40 all functions likewise return to their caller one single flat list of
41 scalars.  Any arrays or hashes in these call and return lists will
42 collapse, losing their identities--but you may always use
43 pass-by-reference instead to avoid this.  Both call and return lists may
44 contain as many or as few scalar elements as you'd like.  (Often a
45 function without an explicit return statement is called a subroutine, but
46 there's really no difference from the language's perspective.)
47
48 Any arguments passed to the routine come in as the array @_.  Thus if you
49 called a function with two arguments, those would be stored in C<$_[0]>
50 and C<$_[1]>.  The array @_ is a local array, but its elements are
51 aliases for the actual scalar parameters.  In particular, if an element
52 C<$_[0]> is updated, the corresponding argument is updated (or an error
53 occurs if it is not updatable).  If an argument is an array or hash
54 element which did not exist when the function was called, that element is
55 created only when (and if) it is modified or if a reference to it is
56 taken.  (Some earlier versions of Perl created the element whether or not
57 it was assigned to.)  Note that assigning to the whole array @_ removes
58 the aliasing, and does not update any arguments.
59
60 The return value of the subroutine is the value of the last expression
61 evaluated.  Alternatively, a return statement may be used to specify the
62 returned value and exit the subroutine.  If you return one or more arrays
63 and/or hashes, these will be flattened together into one large
64 indistinguishable list.
65
66 Perl does not have named formal parameters, but in practice all you do is
67 assign to a my() list of these.  Any variables you use in the function
68 that aren't declared private are global variables.  For the gory details
69 on creating private variables, see
70 L<"Private Variables via my()"> and L<"Temporary Values via local()">.
71 To create protected environments for a set of functions in a separate
72 package (and probably a separate file), see L<perlmod/"Packages">.
73
74 Example:
75
76     sub max {
77         my $max = shift(@_);
78         foreach $foo (@_) {
79             $max = $foo if $max < $foo;
80         }
81         return $max;
82     }
83     $bestday = max($mon,$tue,$wed,$thu,$fri);
84
85 Example:
86
87     # get a line, combining continuation lines
88     #  that start with whitespace
89
90     sub get_line {
91         $thisline = $lookahead;  # GLOBAL VARIABLES!!
92         LINE: while ($lookahead = <STDIN>) {
93             if ($lookahead =~ /^[ \t]/) {
94                 $thisline .= $lookahead;
95             }
96             else {
97                 last LINE;
98             }
99         }
100         $thisline;
101     }
102
103     $lookahead = <STDIN>;       # get first line
104     while ($_ = get_line()) {
105         ...
106     }
107
108 Use array assignment to a local list to name your formal arguments:
109
110     sub maybeset {
111         my($key, $value) = @_;
112         $Foo{$key} = $value unless $Foo{$key};
113     }
114
115 This also has the effect of turning call-by-reference into call-by-value,
116 because the assignment copies the values.  Otherwise a function is free to
117 do in-place modifications of @_ and change its caller's values.
118
119     upcase_in($v1, $v2);  # this changes $v1 and $v2
120     sub upcase_in {
121         for (@_) { tr/a-z/A-Z/ } 
122     } 
123
124 You aren't allowed to modify constants in this way, of course.  If an
125 argument were actually literal and you tried to change it, you'd take a
126 (presumably fatal) exception.   For example, this won't work:
127
128     upcase_in("frederick");
129
130 It would be much safer if the upcase_in() function 
131 were written to return a copy of its parameters instead
132 of changing them in place:
133
134     ($v3, $v4) = upcase($v1, $v2);  # this doesn't
135     sub upcase {
136         my @parms = @_;
137         for (@parms) { tr/a-z/A-Z/ } 
138         # wantarray checks if we were called in list context
139         return wantarray ? @parms : $parms[0];
140     } 
141
142 Notice how this (unprototyped) function doesn't care whether it was passed
143 real scalars or arrays.  Perl will see everything as one big long flat @_
144 parameter list.  This is one of the ways where Perl's simple
145 argument-passing style shines.  The upcase() function would work perfectly
146 well without changing the upcase() definition even if we fed it things
147 like this:
148
149     @newlist   = upcase(@list1, @list2);
150     @newlist   = upcase( split /:/, $var );
151
152 Do not, however, be tempted to do this:
153
154     (@a, @b)   = upcase(@list1, @list2);
155
156 Because like its flat incoming parameter list, the return list is also
157 flat.  So all you have managed to do here is stored everything in @a and
158 made @b an empty list.  See L</"Pass by Reference"> for alternatives.
159
160 A subroutine may be called using the "&" prefix.  The "&" is optional
161 in modern Perls, and so are the parentheses if the subroutine has been
162 pre-declared.  (Note, however, that the "&" is I<NOT> optional when
163 you're just naming the subroutine, such as when it's used as an
164 argument to defined() or undef().  Nor is it optional when you want to
165 do an indirect subroutine call with a subroutine name or reference
166 using the C<&$subref()> or C<&{$subref}()> constructs.  See L<perlref>
167 for more on that.)
168
169 Subroutines may be called recursively.  If a subroutine is called using
170 the "&" form, the argument list is optional, and if omitted, no @_ array is
171 set up for the subroutine: the @_ array at the time of the call is
172 visible to subroutine instead.  This is an efficiency mechanism that
173 new users may wish to avoid.
174
175     &foo(1,2,3);        # pass three arguments
176     foo(1,2,3);         # the same
177
178     foo();              # pass a null list
179     &foo();             # the same
180
181     &foo;               # foo() get current args, like foo(@_) !!
182     foo;                # like foo() IFF sub foo pre-declared, else "foo"
183
184 Not only does the "&" form make the argument list optional, but it also
185 disables any prototype checking on the arguments you do provide.  This
186 is partly for historical reasons, and partly for having a convenient way
187 to cheat if you know what you're doing.  See the section on Prototypes below.
188
189 =head2 Private Variables via my()
190
191 Synopsis:
192
193     my $foo;            # declare $foo lexically local
194     my (@wid, %get);    # declare list of variables local
195     my $foo = "flurp";  # declare $foo lexical, and init it
196     my @oof = @bar;     # declare @oof lexical, and init it
197
198 A "my" declares the listed variables to be confined (lexically) to the
199 enclosing block, conditional (C<if/unless/elsif/else>), loop
200 (C<for/foreach/while/until/continue>), subroutine, C<eval>, or
201 C<do/require/use>'d file.  If more than one value is listed, the list
202 must be placed in parentheses.  All listed elements must be legal lvalues.
203 Only alphanumeric identifiers may be lexically scoped--magical
204 builtins like $/ must currently be localized with "local" instead.
205
206 Unlike dynamic variables created by the "local" statement, lexical
207 variables declared with "my" are totally hidden from the outside world,
208 including any called subroutines (even if it's the same subroutine called
209 from itself or elsewhere--every call gets its own copy).
210
211 (An eval(), however, can see the lexical variables of the scope it is
212 being evaluated in so long as the names aren't hidden by declarations within
213 the eval() itself.  See L<perlref>.)
214
215 The parameter list to my() may be assigned to if desired, which allows you
216 to initialize your variables.  (If no initializer is given for a
217 particular variable, it is created with the undefined value.)  Commonly
218 this is used to name the parameters to a subroutine.  Examples:
219
220     $arg = "fred";        # "global" variable
221     $n = cube_root(27);
222     print "$arg thinks the root is $n\n";
223  fred thinks the root is 3
224
225     sub cube_root {
226         my $arg = shift;  # name doesn't matter
227         $arg **= 1/3;
228         return $arg;
229     }                   
230
231 The "my" is simply a modifier on something you might assign to.  So when
232 you do assign to the variables in its argument list, the "my" doesn't
233 change whether those variables is viewed as a scalar or an array.  So
234
235     my ($foo) = <STDIN>;
236     my @FOO = <STDIN>;
237
238 both supply a list context to the right-hand side, while
239
240     my $foo = <STDIN>;
241
242 supplies a scalar context.  But the following declares only one variable:
243
244     my $foo, $bar = 1;
245
246 That has the same effect as
247
248     my $foo;
249     $bar = 1;
250
251 The declared variable is not introduced (is not visible) until after
252 the current statement.  Thus,
253
254     my $x = $x;
255
256 can be used to initialize the new $x with the value of the old $x, and 
257 the expression
258
259     my $x = 123 and $x == 123
260
261 is false unless the old $x happened to have the value 123.
262
263 Lexical scopes of control structures are not bounded precisely by the
264 braces that delimit their controlled blocks; control expressions are
265 part of the scope, too.  Thus in the loop
266
267     while (my $line = <>) {
268         $line = lc $line;
269     } continue {
270         print $line;
271     }
272
273 the scope of $line extends from its declaration throughout the rest of
274 the loop construct (including the C<continue> clause), but not beyond
275 it.  Similarly, in the conditional
276
277     if ((my $answer = <STDIN>) =~ /^yes$/i) {
278         user_agrees();
279     } elsif ($answer =~ /^no$/i) {
280         user_disagrees();
281     } else {
282         chomp $answer;
283         die "'$answer' is neither 'yes' nor 'no'";
284     }
285
286 the scope of $answer extends from its declaration throughout the rest
287 of the conditional (including C<elsif> and C<else> clauses, if any),
288 but not beyond it.
289
290 (None of the foregoing applies to C<if/unless> or C<while/until>
291 modifiers appended to simple statements.  Such modifiers are not
292 control structures and have no effect on scoping.)
293
294 The C<foreach> loop defaults to scoping its index variable dynamically
295 (in the manner of C<local>; see below).  However, if the index
296 variable is prefixed with the keyword "my", then it is lexically
297 scoped instead.  Thus in the loop
298
299     for my $i (1, 2, 3) {
300         some_function();
301     }
302
303 the scope of $i extends to the end of the loop, but not beyond it, and
304 so the value of $i is unavailable in some_function().
305
306 Some users may wish to encourage the use of lexically scoped variables.
307 As an aid to catching implicit references to package variables,
308 if you say
309
310     use strict 'vars';
311
312 then any variable reference from there to the end of the enclosing
313 block must either refer to a lexical variable, or must be fully
314 qualified with the package name.  A compilation error results
315 otherwise.  An inner block may countermand this with S<"no strict 'vars'">.
316
317 A my() has both a compile-time and a run-time effect.  At compile time,
318 the compiler takes notice of it; the principle usefulness of this is to
319 quiet C<use strict 'vars'>.  The actual initialization doesn't happen
320 until run time, so gets executed every time through a loop.
321
322 Variables declared with "my" are not part of any package and are therefore
323 never fully qualified with the package name.  In particular, you're not
324 allowed to try to make a package variable (or other global) lexical:
325
326     my $pack::var;      # ERROR!  Illegal syntax
327     my $_;              # also illegal (currently)
328
329 In fact, a dynamic variable (also known as package or global variables)
330 are still accessible using the fully qualified :: notation even while a
331 lexical of the same name is also visible:
332
333     package main;
334     local $x = 10;
335     my    $x = 20;
336     print "$x and $::x\n";
337
338 That will print out 20 and 10.
339
340 You may declare "my" variables at the outermost scope of a file to
341 hide any such identifiers totally from the outside world.  This is similar
342 to C's static variables at the file level.  To do this with a subroutine
343 requires the use of a closure (anonymous function).  If a block (such as
344 an eval(), function, or C<package>) wants to create a private subroutine
345 that cannot be called from outside that block, it can declare a lexical
346 variable containing an anonymous sub reference:
347
348     my $secret_version = '1.001-beta';
349     my $secret_sub = sub { print $secret_version };
350     &$secret_sub();
351
352 As long as the reference is never returned by any function within the
353 module, no outside module can see the subroutine, because its name is not in
354 any package's symbol table.  Remember that it's not I<REALLY> called
355 $some_pack::secret_version or anything; it's just $secret_version,
356 unqualified and unqualifiable.
357
358 This does not work with object methods, however; all object methods have
359 to be in the symbol table of some package to be found.
360
361 Just because the lexical variable is lexically (also called statically)
362 scoped doesn't mean that within a function it works like a C static.  It
363 normally works more like a C auto.  But here's a mechanism for giving a
364 function private variables with both lexical scoping and a static
365 lifetime.  If you do want to create something like C's static variables,
366 just enclose the whole function in an extra block, and put the
367 static variable outside the function but in the block.
368
369     {
370         my $secret_val = 0; 
371         sub gimme_another {
372             return ++$secret_val;
373         } 
374     } 
375     # $secret_val now becomes unreachable by the outside
376     # world, but retains its value between calls to gimme_another
377
378 If this function is being sourced in from a separate file 
379 via C<require> or C<use>, then this is probably just fine.  If it's
380 all in the main program, you'll need to arrange for the my() 
381 to be executed early, either by putting the whole block above
382 your pain program, or more likely, placing merely a BEGIN 
383 sub around it to make sure it gets executed before your program
384 starts to run:
385
386     sub BEGIN {
387         my $secret_val = 0; 
388         sub gimme_another {
389             return ++$secret_val;
390         } 
391     } 
392
393 See L<perlrun> about the BEGIN function.
394
395 =head2 Temporary Values via local()
396
397 B<NOTE>: In general, you should be using "my" instead of "local", because
398 it's faster and safer.  Exceptions to this include the global punctuation
399 variables, filehandles and formats, and direct manipulation of the Perl
400 symbol table itself.  Format variables often use "local" though, as do
401 other variables whose current value must be visible to called
402 subroutines.
403
404 Synopsis:
405
406     local $foo;                 # declare $foo dynamically local
407     local (@wid, %get);         # declare list of variables local
408     local $foo = "flurp";       # declare $foo dynamic, and init it
409     local @oof = @bar;          # declare @oof dynamic, and init it
410
411     local *FH;                  # localize $FH, @FH, %FH, &FH  ...
412     local *merlyn = *randal;    # now $merlyn is really $randal, plus
413                                 #     @merlyn is really @randal, etc
414     local *merlyn = 'randal';   # SAME THING: promote 'randal' to *randal
415     local *merlyn = \$randal;   # just alias $merlyn, not @merlyn etc 
416
417 A local() modifies its listed variables to be local to the enclosing
418 block, (or subroutine, C<eval{}>, or C<do>) and I<any called from
419 within that block>.  A local() just gives temporary values to global
420 (meaning package) variables.  This is known as dynamic scoping.  Lexical
421 scoping is done with "my", which works more like C's auto declarations.
422
423 If more than one variable is given to local(), they must be placed in
424 parentheses.  All listed elements must be legal lvalues.  This operator works
425 by saving the current values of those variables in its argument list on a
426 hidden stack and restoring them upon exiting the block, subroutine, or
427 eval.  This means that called subroutines can also reference the local
428 variable, but not the global one.  The argument list may be assigned to if
429 desired, which allows you to initialize your local variables.  (If no
430 initializer is given for a particular variable, it is created with an
431 undefined value.)  Commonly this is used to name the parameters to a
432 subroutine.  Examples:
433
434     for $i ( 0 .. 9 ) {
435         $digits{$i} = $i;
436     } 
437     # assume this function uses global %digits hash
438     parse_num();  
439
440     # now temporarily add to %digits hash
441     if ($base12) {
442         # (NOTE: not claiming this is efficient!)
443         local %digits  = (%digits, 't' => 10, 'e' => 11);
444         parse_num();  # parse_num gets this new %digits!
445     }
446     # old %digits restored here
447
448 Because local() is a run-time command, it gets executed every time
449 through a loop.  In releases of Perl previous to 5.0, this used more stack
450 storage each time until the loop was exited.  Perl now reclaims the space
451 each time through, but it's still more efficient to declare your variables
452 outside the loop.
453
454 A local is simply a modifier on an lvalue expression.  When you assign to
455 a localized variable, the local doesn't change whether its list is viewed
456 as a scalar or an array.  So
457
458     local($foo) = <STDIN>;
459     local @FOO = <STDIN>;
460
461 both supply a list context to the right-hand side, while
462
463     local $foo = <STDIN>;
464
465 supplies a scalar context.
466
467 =head2 Passing Symbol Table Entries (typeglobs)
468
469 [Note:  The mechanism described in this section was originally the only
470 way to simulate pass-by-reference in older versions of Perl.  While it
471 still works fine in modern versions, the new reference mechanism is
472 generally easier to work with.  See below.]
473
474 Sometimes you don't want to pass the value of an array to a subroutine
475 but rather the name of it, so that the subroutine can modify the global
476 copy of it rather than working with a local copy.  In perl you can
477 refer to all objects of a particular name by prefixing the name
478 with a star: C<*foo>.  This is often known as a "typeglob", because the
479 star on the front can be thought of as a wildcard match for all the
480 funny prefix characters on variables and subroutines and such.
481
482 When evaluated, the typeglob produces a scalar value that represents
483 all the objects of that name, including any filehandle, format, or
484 subroutine.  When assigned to, it causes the name mentioned to refer to
485 whatever "*" value was assigned to it.  Example:
486
487     sub doubleary {
488         local(*someary) = @_;
489         foreach $elem (@someary) {
490             $elem *= 2;
491         }
492     }
493     doubleary(*foo);
494     doubleary(*bar);
495
496 Note that scalars are already passed by reference, so you can modify
497 scalar arguments without using this mechanism by referring explicitly
498 to C<$_[0]> etc.  You can modify all the elements of an array by passing
499 all the elements as scalars, but you have to use the * mechanism (or
500 the equivalent reference mechanism) to push, pop, or change the size of
501 an array.  It will certainly be faster to pass the typeglob (or reference).
502
503 Even if you don't want to modify an array, this mechanism is useful for
504 passing multiple arrays in a single LIST, because normally the LIST
505 mechanism will merge all the array values so that you can't extract out
506 the individual arrays.  For more on typeglobs, see
507 L<perldata/"Typeglobs and Filehandles">.
508
509 =head2 Pass by Reference
510
511 If you want to pass more than one array or hash into a function--or
512 return them from it--and have them maintain their integrity, then
513 you're going to have to use an explicit pass-by-reference.  Before you
514 do that, you need to understand references as detailed in L<perlref>.
515 This section may not make much sense to you otherwise.
516
517 Here are a few simple examples.  First, let's pass in several
518 arrays to a function and have it pop all of then, return a new
519 list of all their former last elements:
520
521     @tailings = popmany ( \@a, \@b, \@c, \@d );
522
523     sub popmany {
524         my $aref;
525         my @retlist = ();
526         foreach $aref ( @_ ) {
527             push @retlist, pop @$aref;
528         } 
529         return @retlist;
530     } 
531
532 Here's how you might write a function that returns a 
533 list of keys occurring in all the hashes passed to it:
534
535     @common = inter( \%foo, \%bar, \%joe ); 
536     sub inter {
537         my ($k, $href, %seen); # locals
538         foreach $href (@_) {
539             while ( $k = each %$href ) {
540                 $seen{$k}++;
541             } 
542         } 
543         return grep { $seen{$_} == @_ } keys %seen;
544     } 
545
546 So far, we're using just the normal list return mechanism.
547 What happens if you want to pass or return a hash?  Well, 
548 if you're using only one of them, or you don't mind them 
549 concatenating, then the normal calling convention is ok, although
550 a little expensive.  
551
552 Where people get into trouble is here:
553
554     (@a, @b) = func(@c, @d);
555 or
556     (%a, %b) = func(%c, %d);
557
558 That syntax simply won't work.  It sets just @a or %a and clears the @b or
559 %b.  Plus the function didn't get passed into two separate arrays or
560 hashes: it got one long list in @_, as always.
561
562 If you can arrange for everyone to deal with this through references, it's
563 cleaner code, although not so nice to look at.  Here's a function that
564 takes two array references as arguments, returning the two array elements
565 in order of how many elements they have in them:
566
567     ($aref, $bref) = func(\@c, \@d);
568     print "@$aref has more than @$bref\n";
569     sub func {
570         my ($cref, $dref) = @_;
571         if (@$cref > @$dref) {
572             return ($cref, $dref);
573         } else {
574             return ($dref, $cref);
575         } 
576     } 
577
578 It turns out that you can actually do this also:
579
580     (*a, *b) = func(\@c, \@d);
581     print "@a has more than @b\n";
582     sub func {
583         local (*c, *d) = @_;
584         if (@c > @d) {
585             return (\@c, \@d);
586         } else {
587             return (\@d, \@c);
588         } 
589     } 
590
591 Here we're using the typeglobs to do symbol table aliasing.  It's
592 a tad subtle, though, and also won't work if you're using my()
593 variables, because only globals (well, and local()s) are in the symbol table.
594
595 If you're passing around filehandles, you could usually just use the bare
596 typeglob, like *STDOUT, but typeglobs references would be better because
597 they'll still work properly under C<use strict 'refs'>.  For example:
598
599     splutter(\*STDOUT);
600     sub splutter {
601         my $fh = shift;
602         print $fh "her um well a hmmm\n";
603     }
604
605     $rec = get_rec(\*STDIN);
606     sub get_rec {
607         my $fh = shift;
608         return scalar <$fh>;
609     }
610
611 Another way to do this is using *HANDLE{IO}, see L<perlref> for usage
612 and caveats.
613
614 If you're planning on generating new filehandles, you could do this:
615
616     sub openit {
617         my $name = shift;
618         local *FH;
619         return open (FH, $path) ? *FH : undef;
620     } 
621
622 Although that will actually produce a small memory leak.  See the bottom
623 of L<perlfunc/open()> for a somewhat cleaner way using the IO::Handle
624 package.
625
626 =head2 Prototypes
627
628 As of the 5.002 release of perl, if you declare
629
630     sub mypush (\@@)
631
632 then mypush() takes arguments exactly like push() does.  The declaration
633 of the function to be called must be visible at compile time.  The prototype
634 affects only the interpretation of new-style calls to the function, where
635 new-style is defined as not using the C<&> character.  In other words,
636 if you call it like a builtin function, then it behaves like a builtin
637 function.  If you call it like an old-fashioned subroutine, then it
638 behaves like an old-fashioned subroutine.  It naturally falls out from
639 this rule that prototypes have no influence on subroutine references
640 like C<\&foo> or on indirect subroutine calls like C<&{$subref}>.
641
642 Method calls are not influenced by prototypes either, because the
643 function to be called is indeterminate at compile time, because it depends
644 on inheritance.
645
646 Because the intent is primarily to let you define subroutines that work
647 like builtin commands, here are the prototypes for some other functions
648 that parse almost exactly like the corresponding builtins.
649
650     Declared as                 Called as
651
652     sub mylink ($$)             mylink $old, $new
653     sub myvec ($$$)             myvec $var, $offset, 1
654     sub myindex ($$;$)          myindex &getstring, "substr"
655     sub mysyswrite ($$$;$)      mysyswrite $buf, 0, length($buf) - $off, $off
656     sub myreverse (@)           myreverse $a,$b,$c
657     sub myjoin ($@)             myjoin ":",$a,$b,$c
658     sub mypop (\@)              mypop @array
659     sub mysplice (\@$$@)        mysplice @array,@array,0,@pushme
660     sub mykeys (\%)             mykeys %{$hashref}
661     sub myopen (*;$)            myopen HANDLE, $name
662     sub mypipe (**)             mypipe READHANDLE, WRITEHANDLE
663     sub mygrep (&@)             mygrep { /foo/ } $a,$b,$c
664     sub myrand ($)              myrand 42
665     sub mytime ()               mytime
666
667 Any backslashed prototype character represents an actual argument
668 that absolutely must start with that character.  The value passed
669 to the subroutine (as part of C<@_>) will be a reference to the
670 actual argument given in the subroutine call, obtained by applying
671 C<\> to that argument.
672
673 Unbackslashed prototype characters have special meanings.  Any
674 unbackslashed @ or % eats all the rest of the arguments, and forces
675 list context.  An argument represented by $ forces scalar context.  An
676 & requires an anonymous subroutine, which, if passed as the first
677 argument, does not require the "sub" keyword or a subsequent comma.  A
678 * does whatever it has to do to turn the argument into a reference to a
679 symbol table entry.
680
681 A semicolon separates mandatory arguments from optional arguments.
682 (It is redundant before @ or %.)
683
684 Note how the last three examples above are treated specially by the parser.
685 mygrep() is parsed as a true list operator, myrand() is parsed as a
686 true unary operator with unary precedence the same as rand(), and
687 mytime() is truly without arguments, just like time().  That is, if you
688 say
689
690     mytime +2;
691
692 you'll get mytime() + 2, not mytime(2), which is how it would be parsed
693 without the prototype.
694
695 The interesting thing about & is that you can generate new syntax with it:
696
697     sub try (&@) {
698         my($try,$catch) = @_;
699         eval { &$try };
700         if ($@) {
701             local $_ = $@;
702             &$catch;
703         }
704     }
705     sub catch (&) { $_[0] }
706
707     try {
708         die "phooey";
709     } catch {
710         /phooey/ and print "unphooey\n";
711     };
712
713 That prints "unphooey".  (Yes, there are still unresolved
714 issues having to do with the visibility of @_.  I'm ignoring that
715 question for the moment.  (But note that if we make @_ lexically
716 scoped, those anonymous subroutines can act like closures... (Gee,
717 is this sounding a little Lispish?  (Never mind.))))
718
719 And here's a reimplementation of grep:
720
721     sub mygrep (&@) {
722         my $code = shift;
723         my @result;
724         foreach $_ (@_) {
725             push(@result, $_) if &$code;
726         }
727         @result;
728     }
729
730 Some folks would prefer full alphanumeric prototypes.  Alphanumerics have
731 been intentionally left out of prototypes for the express purpose of
732 someday in the future adding named, formal parameters.  The current
733 mechanism's main goal is to let module writers provide better diagnostics
734 for module users.  Larry feels the notation quite understandable to Perl
735 programmers, and that it will not intrude greatly upon the meat of the
736 module, nor make it harder to read.  The line noise is visually
737 encapsulated into a small pill that's easy to swallow.
738
739 It's probably best to prototype new functions, not retrofit prototyping
740 into older ones.  That's because you must be especially careful about
741 silent impositions of differing list versus scalar contexts.  For example,
742 if you decide that a function should take just one parameter, like this:
743
744     sub func ($) {
745         my $n = shift;
746         print "you gave me $n\n";
747     } 
748
749 and someone has been calling it with an array or expression
750 returning a list:
751
752     func(@foo);
753     func( split /:/ );
754
755 Then you've just supplied an automatic scalar() in front of their
756 argument, which can be more than a bit surprising.  The old @foo
757 which used to hold one thing doesn't get passed in.  Instead,
758 the func() now gets passed in 1, that is, the number of elements
759 in @foo.  And the split() gets called in a scalar context and
760 starts scribbling on your @_ parameter list.
761
762 This is all very powerful, of course, and should be used only in moderation
763 to make the world a better place.  
764
765 =head2 Constant Functions
766
767 Functions with a prototype of C<()> are potential candidates for
768 inlining.  If the result after optimization and constant folding is a
769 constant then it will be used in place of new-style calls to the
770 function.  Old-style calls (that is, calls made using C<&>) are not
771 affected.
772
773 All of the following functions would be inlined.
774
775     sub pi ()           { 3.14159 }             # Not exact, but close.
776     sub PI ()           { 4 * atan2 1, 1 }      # As good as it gets,
777                                                 # and it's inlined, too!
778     sub ST_DEV ()       { 0 }
779     sub ST_INO ()       { 1 }
780
781     sub FLAG_FOO ()     { 1 << 8 }
782     sub FLAG_BAR ()     { 1 << 9 }
783     sub FLAG_MASK ()    { FLAG_FOO | FLAG_BAR }
784     
785     sub OPT_BAZ ()      { 1 }
786     sub BAZ_VAL () {
787         if (OPT_BAZ) {
788             return 23;
789         }
790         else {
791             return 42;
792         }
793     }
794
795 If you redefine a subroutine which was eligible for inlining you'll get
796 a mandatory warning.  (You can use this warning to tell whether or not a
797 particular subroutine is considered constant.)  The warning is
798 considered severe enough not to be optional because previously compiled
799 invocations of the function will still be using the old value of the
800 function.  If you need to be able to redefine the subroutine you need to
801 ensure that it isn't inlined, either by dropping the C<()> prototype
802 (which changes the calling semantics, so beware) or by thwarting the
803 inlining mechanism in some other way, such as
804
805     my $dummy;
806     sub not_inlined () {
807         $dummy || 23
808     }
809
810 =head2 Overriding Builtin Functions
811
812 Many builtin functions may be overridden, though this should be tried
813 only occasionally and for good reason.  Typically this might be
814 done by a package attempting to emulate missing builtin functionality
815 on a non-Unix system.
816
817 Overriding may be done only by importing the name from a
818 module--ordinary predeclaration isn't good enough.  However, the
819 C<subs> pragma (compiler directive) lets you, in effect, pre-declare subs
820 via the import syntax, and these names may then override the builtin ones:
821
822     use subs 'chdir', 'chroot', 'chmod', 'chown';
823     chdir $somewhere;
824     sub chdir { ... }
825
826 Library modules should not in general export builtin names like "open"
827 or "chdir" as part of their default @EXPORT list, because these may
828 sneak into someone else's namespace and change the semantics unexpectedly.
829 Instead, if the module adds the name to the @EXPORT_OK list, then it's
830 possible for a user to import the name explicitly, but not implicitly.
831 That is, they could say
832
833     use Module 'open';
834
835 and it would import the open override, but if they said
836
837     use Module;
838
839 they would get the default imports without the overrides.
840
841 =head2 Autoloading
842
843 If you call a subroutine that is undefined, you would ordinarily get an
844 immediate fatal error complaining that the subroutine doesn't exist.
845 (Likewise for subroutines being used as methods, when the method
846 doesn't exist in any of the base classes of the class package.) If,
847 however, there is an C<AUTOLOAD> subroutine defined in the package or
848 packages that were searched for the original subroutine, then that
849 C<AUTOLOAD> subroutine is called with the arguments that would have been
850 passed to the original subroutine.  The fully qualified name of the
851 original subroutine magically appears in the $AUTOLOAD variable in the
852 same package as the C<AUTOLOAD> routine.  The name is not passed as an
853 ordinary argument because, er, well, just because, that's why...
854
855 Most C<AUTOLOAD> routines will load in a definition for the subroutine in
856 question using eval, and then execute that subroutine using a special
857 form of "goto" that erases the stack frame of the C<AUTOLOAD> routine
858 without a trace.  (See the standard C<AutoLoader> module, for example.)
859 But an C<AUTOLOAD> routine can also just emulate the routine and never
860 define it.   For example, let's pretend that a function that wasn't defined
861 should just call system() with those arguments.  All you'd do is this:
862
863     sub AUTOLOAD {
864         my $program = $AUTOLOAD;
865         $program =~ s/.*:://;
866         system($program, @_);
867     } 
868     date();
869     who('am', 'i');
870     ls('-l');
871
872 In fact, if you pre-declare the functions you want to call that way, you don't
873 even need the parentheses:
874
875     use subs qw(date who ls);
876     date;
877     who "am", "i";
878     ls -l;
879
880 A more complete example of this is the standard Shell module, which
881 can treat undefined subroutine calls as calls to Unix programs.
882
883 Mechanisms are available for modules writers to help split the modules
884 up into autoloadable files.  See the standard AutoLoader module
885 described in L<AutoLoader> and in L<AutoSplit>, the standard
886 SelfLoader modules in L<SelfLoader>, and the document on adding C
887 functions to perl code in L<perlxs>.
888
889 =head1 SEE ALSO
890
891 See L<perlref> for more on references.  See L<perlxs> if you'd
892 like to learn about calling C subroutines from perl.  See 
893 L<perlmod> to learn about bundling up your functions in 
894 separate files.