That’s not a second-best practice at all, particularly if the loop variable just iterates over a well-named array or a (really) self-explanatory expression. F.ex., I’d rewrite foreach my $index ( 0 .. $#somearray ) { wibble( $index, wubble( $somearray[ $index ] ) ); } to use $i instead.
Length is not a goal for naming variables; choosing them so the code is easier to read is. That means a name needs to be long and descriptive if the variable’s scope is large, but conversely also that it should be shorter for a more tightly scoped variable. Picking one-letter identifiers for loop variables on short loops helps readability. (Of course, if the list expression is actually very complex, you will probably want to use a longer name to describe what the expression means. Naming things is a complex craft.)
Makeshifts last the longest.