in reply to $# -variable?

$#ary is the index of the last element in the array, whilst it is highly discouraged the base of the array (i.e. the index of the first element) can be altered by setting the variable $[, so to reliably know the number of elements in an array you want to use scalar @ary.

If you really do insist on using this to index an array then you probably want (in a C style for statement):

for (my $i = $[; $i <= $#ary; $i++) { # ... }
or using the more perlish idiom:
foreach my $i ( $[ .. $#ary ) { # ... }
Of course unless one has a pressing need to know the index one would eschew the index counter and iterate over the array directly:
foreach my $element (@ary) { # ... }

/J\