In the same way, an experienced programmer who has never read Perl before in their life might well guess that at the meaning of $#foo when he or she sees for (0..$#foo). He or she knows that "for" clauses generally have starting and ending boundary conditions. 0 looks like a starting condition. ".." is a common symbol for a series in both mathematics and English. By process of elimination $#foo is likely to be the final boundary condition.
If I were to define readability, I'd say it's the measure of ease of doing this is, deducing the function of code from contextual clues.
However the ability to guess at the meaning is not quite the same thing as $#foo having inherent meaning on its own
Correct, but it won't be found on its own, so it's irrelevant to the question of readability as far as I'm concerned.
!@somearray only makes sense once you've got the notion of context determining data type
I believe otherwise.