If you have a problem figuring out how to deal with data structures, run the program in the perl debugger, then figure out bits one elevel at a time. I used a simpler structure than yours, cause copying it was work. ( -d is the debugger flag. if you don't specify a file, you need to specify an immediate expression, -e. 'mo' is meaningless garbage which generates an error, but makes for a useful mnemonic)
legrady$ perl -demo
Loading DB routines from perl5db.pl version 1.33
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1): mo
DB<1> %temp = ( '0x55555555' => { '0x55555555' => [["0xAAAAAAAA", "0
+x9"]]});
DB<2> x \%temp
0 HASH(0x7fa2811ab830)
'0x55555555' => HASH(0x7fa2811ab920)
'0x55555555' => ARRAY(0x7fa2811ab8d8)
0 ARRAY(0x7fa281028b78)
0 '0xAAAAAAAA'
1 '0x9'
DB<3> x $temp{'0x55555555'}
0 HASH(0x7fa2811ab920)
'0x55555555' => ARRAY(0x7fa2811ab8d8)
0 ARRAY(0x7fa281028b78)
0 '0xAAAAAAAA'
1 '0x9'
DB<4> x $temp{'0x55555555'}{'0x55555555'}
0 ARRAY(0x7fa2811ab8d8)
0 ARRAY(0x7fa281028b78)
0 '0xAAAAAAAA'
1 '0x9'
DB<5> x $temp{'0x55555555'}{'0x55555555'}[0]
0 ARRAY(0x7fa281028b78)
0 '0xAAAAAAAA'
1 '0x9'
DB<6> x $temp{'0x55555555'}{'0x55555555'}[0][0]
0 '0xAAAAAAAA'
DB<7> x $temp{'0x55555555'}{'0x55555555'}[0][1]
0 '0x9'
DB<8> q
As Occam said: Entia non sunt multiplicanda praeter necessitatem.