in reply to treating the filesystem structure as hash of hashes

Try mounting your file system with the option posix=0. From the mount(8) man page:
posix=[0|1] If enabled (posix=1), the file system distinguishes between upper and lower case. The 8.3 alias names are presented as hard links instead of being suppressed.
Also see the check option under "Mount options for FAT".