perlsub explains the semantics of the different calling syntaxes. One little-known difference is that
&foo, with no parentheses, gives foo access to the current contents of @_:
#!/usr/local/bin/perl
sub foo {
$_[0] = 'b';
}
@_ = 'a';
foo();
print "@_\n";
&foo;
print "@_\n";
__END__
a
b