in reply to when to use lists/hash vs references?

As long as you know what the difference is, it doesn't really matter much which one you use.

Under some circumstances, it might be more "natural" to use a plain hash, for example when Perl syntactically requires a hash, as in keys %hash (because then you don't have to write keys %$hash to dereference a hashref).  In other cases, it might be more natural to use a hashref in the first place, e.g. when you want to pass it to a function without copying/flattening it (so you can say func($hash) instead of func(\%hash) ).  But ultimately, it's just a matter of personal preference.

P.S.: the arrows between indices are optional (because there's nothing to disambiguate — nested structures are always references), i.e. your sample case could also be written as

$a[0][2]{foo} # plain array $r->[0][2]{foo} # array ref