Semantics
Before you get too worked up over all that syntax, just remember that the normal way to define a simple subroutine ends up looking like this:
sub razzle {
print "Ok, you've been razzled.\n";
}and the normal way to call it is simply:
razzle();
In this case, we ignored inputs (arguments) and outputs (return
values). But the Perl model for passing data into and out of a
subroutine is really quite simple: all function parameters are passed
as one single, flat list of scalars, and multiple return values are
likewise returned to the caller as one single, flat list of scalars.
As with any LIST, any arrays or hashes
passed in these lists will interpolate their values into the flattened
list, losing their identities—but there are several ways to get around
this, and the automatic list interpolation is frequently quite useful.
Both parameter lists and return lists may contain as many or as few
scalar elements as you’d like (though you may put constraints on the
parameter list by using prototypes). Indeed, Perl is designed around
this notion of variadic functions (those taking any number of arguments), unlike
C, where they’re sort of grudgingly kludged in so that you can call
printf(3).
Now, if you’re going to design a language around the notion of
passing varying numbers of arbitrary arguments, you’d better make it
easy to process those arbitrary lists of arguments. Any arguments
passed to a Perl routine come in as the array @_. If you call a function with two arguments, they are accessible ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access