OK, there is an array @r somewhere in scope. It has at least four elements. For simplicity, let's assume...
my @r = ('a', 'b', 'c', 'd');
Thus your original code can be rewritten as:
push @{ $genes{'a'}{'b'}{'c'} }, 'd';
Which means that %genes is a hash; $genes{'a'} is one of the items in the hash, and the value of $genes{'a'} is itself a hashref. Similarly, the value of $genes{'a'}{'b'} is also a hashref, and $genes{'a'}{'b'}{'c'} is an arrayref.
And here we're pushing 'd' onto the array referenced by $genes{'a'}{'b'}{'c'}.
So overall, your code is pushing the value of $r[3] onto an array, which is referenced by the value corresponding to key $r[2] in a hash, which is referenced by the value corresponding to key $r[1] in a hash, which is referenced by $genes{ $r[0] } which itself is a single value from the hash %genes.
You could say %gene is a hash of hashes of hashes of arrays, though of course when you have a tree structure like that, perhaps not all branches are symmetrical. If $r[0] took a different value, then perhaps we might consider %gene to be a hash of file handles.
In reply to Re: Hash of Hash of Array Syntax help
by tobyink
in thread Hash of Hash of Array Syntax help
by ZWcarp
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |