in reply to Calling Functions

For me, the biggest difference is that if you neither use & nor use parenthesis, a mistyped subroutine name will be a compile time error (with strict) or warning (with warnings enabled), instead of a run time error.
$ perl -Mstrict -wce 'sub f {1;} &g' -e syntax OK $ perl -Mstrict -wce 'sub f {1;} g()' -e syntax OK $ perl -Mstrict -wce 'sub f {1;} g' Bareword "g" not allowed while "strict subs" in use at -e line 1. -e had compilation errors. $ perl -wce 'sub f {1;} g' Unquoted string "g" may clash with future reserved word at -e line 1. Useless use of a constant (g) in void context at -e line 1. -e syntax OK $ perl -Mstrict -wce 'sub f {1;} f' -e syntax OK $