"John W. Krahn" schreef:
> 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"?

Well, I expected both +AB and -AB would trigger a "bareword" error.
But also like this:

  $ perl -Mstrict -wle 'my $x = -XY; print $x'

there is no error message.


With a "+" it is different though:

  $ perl -Mstrict -wle 'my $x = +XY; print $x'
  Bareword "XY" not allowed while "strict subs" in use at -e line 1.
  Execution of -e aborted due to compilation errors.


> Unary plus and unary minus appear to be behaving correctly.  :-)

Right. :)

-- 
Affijn, Ruud

"Gewoon is een tijger."


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to