Current Perl documentation can be found at perldoc.perl.org.
Here is our local, out-dated (pre-5.6) version:
When you call a function as &foo
, you allow that function access to your current @_
values,
and you by-pass prototypes. That means that the function doesn't get an
empty @_, it gets yours! While not strictly speaking a bug (it's documented
that way in the perlsub manpage), it would be hard to consider this a feature in most cases.
When you call your function as &foo()
, then you do get a new @_, but prototyping is still circumvented.
Normally, you want to call a function using foo()
. You may only omit the parentheses if the function is already known to the
compiler because it already saw the definition (use but not require), or via a forward reference or use subs
declaration. Even in this case, you get a clean @_
without any
of the old values leaking through where they don't belong.