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.
|