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.