This is really only one case. In the example with the "fat comma" operator (=>), the fat comma isn't doing any quoting. The -foo gets is quoted anyway; without the fat comma...
my %hash = (-foo, 'bar');
The weird -foo thing is documented in perlop:
Unary "-" performs arithmetic negation if the operand is numeric. If the operand is an identifier, a string consisting of a minus sign concatenated with the identifier is returned. Otherwise, if the string starts with a plus or minus, a string starting with the opposite sign is returned. One effect of these rules is that -bareword is equivalent to the string "-bareword". If, however, the string begins with a non-alphabetic character (excluding "+" or "-"), Perl will attempt to convert the string to a numeric and the arithmetic negation is performed.
So it's a documented feature of Perl. Why was the feature added? I'm not quite sure of the history. It's possible that it was originally a mistake that arose in the code that parsed file test operators (see -X in perlfunc), and then became too widely used to change. Or maybe it was intentional to begin with.
Either way, it's quite a cute way to accept option names to functions, etc without needing to quote them.
In reply to Re: Why is this auto-quoted?
by tobyink
in thread Why is this auto-quoted?
by nbtrap
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |