I don't know Perl, so I rewrote it in Python in an attempt to understand what's going on: [link redacted]
I'm not storing key,value pairs for elements that don't exist (not sure what the Perl code's doing), so it shouldn't be too bad in terms of space used.