in reply to Why is this auto-quoted?
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.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Why is this auto-quoted?
by Anonymous Monk on Jul 31, 2013 at 03:27 UTC | |
by Anonymous Monk on Jul 31, 2013 at 03:39 UTC | |
by QM (Parson) on Jul 31, 2013 at 08:45 UTC | |
by Anonymous Monk on Jul 31, 2013 at 09:13 UTC | |
by tobyink (Abbot) on Jul 31, 2013 at 11:29 UTC | |
by QM (Parson) on Jul 31, 2013 at 15:54 UTC | |
| |
Re^2: Why is this auto-quoted?
by nbtrap (Sexton) on Jul 30, 2013 at 22:32 UTC | |
Re^2: Why is this auto-quoted? (tcl/tk)
by Anonymous Monk on Jul 30, 2013 at 23:00 UTC |