It's been over a decade for me but I remember the # for tables and @ for arrays not being that hard to decipher, it was the "where is this $_ referring to at this point?" kind of puzzles that would stump me, especially when pattern matching application implicitly uses it too.
A pretty good rule of thumb was always, $_ is most likely the thing you need it to be. Oh, there are exceptions, but in my experience they were generally caused by code that had been made inappropriately clever.