the local @_ is implicitly passed
It's even the same @_. This means that &foo(@_) and &foo; won't behave the same; see perlfaq7, "What's the difference between calling a function as &foo and foo()?". Demonstration:
use strict;
sub foo { pop }
sub bar {
print "bar before: @_";
print '&foo : ' . &foo . " <--- I am a theif";
print "bar after : @_ <--- no c";
}
sub baz {
print "baz before: @_";
print '&foo(@_) : ' . &foo(@_);
print "baz after : @_";
}
bar(qw/ a b c /); print '';
baz(qw/ a b c /);
__END__
bar before: a b c
&foo : c <--- I am a theif
bar after : a b <--- no c
baz before: a b c
&foo(@_) : c
baz after : a b c
ihb
See perltoc if you don't know which perldoc to read!