My favorite (or least favorite) is when Perl tries to be a functional language and treat the name of a function as a first-order value. In normal circumstances, if
foo is a function name, and it's followed by a comma, the meaning is to call
foo with no args and return the result. For example:
print lc, $/;
## ^^
## call lc with no args, return the result:
But in places like
map EXPR and
grep EXPR, it can mean something very different. This is especially bizarre when
foo is a built-in that modifies $_ when it is called with no args:
map chop, @items;
## ^^^^
## calls map with first argument = sub{ chop; }
## doesn't change current value of $_
anyotherfunc chop, @items;
## ^^^^
## calls anyotherfunc with first argument = result of chop($_)
## changes current value of $_ !!