Chaps,

I have data in a three-deep hash reference (HoHoH) called $rhHandles and I wanted to extract those second level hash records with the "public" attribute set and place them in another HoH structure, $rhPublicHandles. I had the keys I wanted in a list, @publicHandles, and my first solution was to iterate over @publicHandles in a for loop;

$rhPublicHandles->{$_} = $rhHandles->{handles}->{$_} for @publicHandles;

However, I wondered whether using a hash slice would be a more efficient solution. After a struggle to get my head around the syntax I came up with this.

@{%{$rhPublicHandles}}{@publicHandles} = @{%{$rhHandles->{handles}}}{@publicHandles};

It works very well and benchmarks faster that the loop but it is not nearly as readable for those who have to maintain my code when I move on.

The question, then, is whether there is a simpler, more readable syntax for hash reference slicing that I could employ to do this job. I don't really want to sacrifice the efficiency of the slice but the loop is far more obvious in what it is doing.

Cheers,

JohnGG


In reply to Tricky syntax with hash ref. slicing by johngg

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.