Do you know where your variables are? | |
PerlMonks |
Re: hash dereferencing issue with perl 5.16.3by Athanasius (Archbishop) |
on May 02, 2015 at 16:03 UTC ( [id://1125450]=note: print w/replies, xml ) | Need Help?? |
Hello KANAKADANDI, and welcome to the Monastery! Consider the following excerpt from the Camel Book (4th Edition, 2012, p. 85): When you evaluate a hash variable in scalar context, it returns a true value only if the hash contains any key/value pairs whatsoever. If there are any key/value pairs at all, the value returned is a string consisting of the number of used buckets and the number of allocated buckets, separated by a slash. So your error message shows that within the expression ${%{$lHashRef}}{'a'} the sub-expression %{$lHashRef} is being evaluated in scalar context. Like toolic, I looked at index-history but didn’t find anything to account for the change. In more modern Perls, you have the following syntactic options for dereferencing the hash reference:
The arrow (->) syntax is usually the best choice as it requires fewer sigils and makes it visually obvious that the expression on the left of the arrow is a reference. ...is there anyway to make the below script to work by changing some perl generic settings rather than changing the scripts?? Probably not. In any case, changing the syntax of the affected expressions from ${%{$ref}}{key} to $ref->{key} is likely the quickest fix, and will have the by-product of making the code more readable. Hope that helps,
In Section
Seekers of Perl Wisdom
|
|