I don't agree code with multiple indices is necessary hard to read, and using an intermediate reference is clearer. Something like:
$data {$host} {$user} {$process} += $time_used;
is in my opinion far more clear than:
$host_ref = $data {$host}; $user_host_ref = $host_ref -> {$user}; $proc_user_host_ref = $user_host_ref -> {$process}; $proc_user_host_ref += $time_used;
The former clearly shows you are collecting data, per host, per user and per process. The latter is just a mess, and you quickly run out of sensible variable names.

If you have cases where $var {key1} {key2} {key3} becomes unclear, you either have to redesign your datastructure, or need to find better key or variable names.

That using a reference to an inner structure is a win in your benchmark is clear, as you don't have to redo some calculations. But you cannot do that always - you can only do that if you access the same keys repeatedly. Often, the keys used are variable, and will differ from iteration to iteration.


In reply to Re: The Cost of Nested Referencing by Abigail-II
in thread The Cost of Nested Referencing by shotgunefx

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