Dr.Ruud wrote: > "Chas Owens" schreef: >> Dr.Ruud: > >>> Some evaluation is done first: >>> >>> perl -Mstrict -MData::Dumper -wle' >>> $_ = {0b1_0 => "A", 01_0 => "B", 0x1_0 => "C", 1_0 => "D", _1_0 => >>> "E", *_ => "F", \_ => "G"}; >>> print Dumper $_ >>> ' >>> $VAR1 = { >>> '8' => 'B', >>> '_1_0' => 'E', >>> '*main::_' => 'F', >>> '10' => 'D', >>> '16' => 'C', >>> 'SCALAR(0x8062850)' => 'G', >>> '2' => 'A' >>> }; >> snip >> >> Nope, it has nothing to do with evaluation. > > Ah, you misunderstood my "evaluation" which had nothing to do with > eval(). Maye I should have used "parsing and compiling". > > >> The trick is that it only >> works on barewords (matches /[_A-Za-z][_A-Za-z0-9]*/). 0b1_0 is not a >> bareword because it starts with a number. The same goes for 01_0, >> 0x1_0, and 1_0. _1_0 works because barewords may start with an >> underscore. *_ and \_ are definitely not a barewords since they >> contain characters that are not even in the allowed set. Anything >> that fails the bareword test is treated as if the '=>' operator were a >> normal ',' operator. > > Yes, "passing the bareword test" is a better phrase than only mentioning > "word" characters. > > There are border cases though: > > perl -Mstrict -MData::Dumper -wle' > $_ = { AB => 1, +AB => 2, -AB => 3 }; > print Dumper $_ > ' > $VAR1 = { > '-AB' => 3, > 'AB' => 2 > };
It depends on what you mean by "border case"? $ perl -Mstrict -MData::Dumper -wle' $_ = { 67 => 1, +67 => 2, -67 => 3 }; print Dumper $_ ' $VAR1 = { '67' => 2, '-67' => 3 }; Unary plus and unary minus appear to be behaving correctly. :-) John -- Perl isn't a toolbox, but a small machine shop where you can special-order certain sorts of tools at low cost and in short order. -- Larry Wall -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/