Prototypes
Prototypes allow you to design your subroutines to take arguments with constraints on the number of parameters and types of data. To declare a function with prototypes, use the prototype symbols in the declaration line like this:
sub addem ($$) { ... }
In this case, the function expects two scalar arguments. The following table gives the various prototype symbols :
Symbol | Meaning |
---|---|
| Scalar |
| List |
| Hash |
| Anonymous subroutine |
| Typeglob |
A backslash placed before one of these symbols forces the argument to be that exact variable type. For instance, a function that requires a hash variable would be declared like this:
sub hashfunc (\%);
Unbackslashed @
or %
symbols act exactly alike and will eat
up all remaining arguments, forcing list context. Likewise, a
$
forces scalar context on an
argument, so taking an array or hash variable for that parameter
would probably yield unwanted results.
A semicolon separates mandatory arguments from optional arguments. For example:
sub newsplit (\@$;$);
requires two arguments: an array variable and a scalar. The
third scalar is optional. Placing a semicolon before @
and %
is not necessary since lists can be null.
A typeglob prototype symbol (*
) will always turn its argument into a
reference to a symbol table entry. It is most often used for
filehandles.
Get Perl in a Nutshell, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.