Thanks it does help, I was just wondering if there was any way to avoid having to use map or another transformation at all.

To clarify the original objective, it was to have a common hash structure between the function I mentioned and results from selectall_hashref.

I was trying to find a way to manipulate the selectall_hashref to provide a resulting hash as described that can be used as $$hash{$id}{$key} = $value.

Your code provides a valid solution albeit through a different approach - "modify the structure passed to the function to look like the result from the selectall hash", and should work just fine unless someone can come up with an even better solution.