in reply to Comma's and blocks

First off, it's "commas", not "comma's".
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.