Why are the commas excluded in some spots and not others?
Because of choices the designers made, either to reduce ambiguity or reduce typing. You always need a comma, except in the cases you noted: map, grep, and print FILEHANDLE.
How does this work with your own prototypes and subroutines?
Your own subroutines need commas between their arguments, with one exception. When using the & prototype in the first position and calling the subroutines without parentheses, you may use for that argument a plain BLOCK, rather than "sub BLOCK" followed by a comma. (Note that the reverse is NOT true; map( sub {$_ + 1}, 1, 2, 3 ) will produce a list of code references instead of (2, 3, 4).)
99% of the time you don't need prototypes anyway.
Which perldoc covers this in depth?
For how to call built-in functions, see perlfunc. For how to write prototypes and subroutines, see perlsub.
In reply to Re: Comma's and blocks
by mrpeabody
in thread Comma's and blocks
by zer
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |