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:

my $lValue = ${$lHashRef}{'a'}; my $lValue = $$lHashRef{'a'}; my $lValue = $lHashRef->{'a'};

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,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,


In reply to Re: hash dereferencing issue with perl 5.16.3 by Athanasius
in thread hash dereferencing issue with perl 5.16.3 by KANAKADANDI

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.