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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |