in reply to why avoid & on function call

The difference is described in perlsub: The ampersand is used to circumvents prototypes or make the current @_ visible to the called subroutine.

What is a prototype, you ask? It's described in the same perlsub, or you can read Far More than Everything You've Ever Wanted to Know about Prototypes in Perl -- by Tom Christiansen.

Forwarding the argument list can be confusing, especially if there's a shift or pop involved, or when calling a functional subroutine from a method.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]