P is for Practical | |
PerlMonks |
Re^5: hash sliceby Roy Johnson (Monsignor) |
on Mar 10, 2005 at 17:56 UTC ( [id://438360]=note: print w/replies, xml ) | Need Help?? |
It may have not been there when you started to respond, since I tend to revise and expand my answers after posting, but I did explain the behavior you see. I agree that it is not what most people expect.
The slice is being converted internally into a list: ($x[2]..$x[7]), and then that list is being evaluated in a scalar context, which means that it is not a list, but an expression with multiple comma operators. And the comma operator yields its right-hand side. Interestingly, defined works the same way, so defined(@x[2..7]) is the same as defined($x[7]). So at least when you undef a hash slice, testing it for definedness works as expected, even though several of the values are defined. I note again, you cannot provide a list to undef or defined. You get a compiler error. For defined, you can say and it does the same as it does for a slice. But you can't use scalar() with undef, because scalar doesn't yield lvalues. Caution: Contents may have been coded under pressure.
In Section
Seekers of Perl Wisdom
|
|