This and other RFCs are available on the web at http://dev.perl.org/rfc/ =head1 TITLE Implicit counter in for statements, possibly $#. =head1 VERSION Maintainer: John McNamara <[EMAIL PROTECTED]> Date: 16 Aug 2000 Last-Modified: 16 Aug 2000 Version: 2 Mailing List: [EMAIL PROTECTED] Number: 120 =head1 ABSTRACT The syntax of Perl style C<for> statements could be simplified by the introduction of an implicit counter variable. The deprecated variable C<$#> could be used for this purpose due to its mnemonic association with C<$#array>. =head1 DESCRIPTION The following discussion makes no distinction between the C<for> and C<foreach> statements. The use of the C<foreach> statement or the C<for> statement in conjunction with the range operator, C<..>, are generally seen as good idiomatic Perl: @array = qw(sun moon stars rain); foreach $item (@array) { print $item, "\n"; } as opposed to the "endearing attachment to C" style: for ($i = 0; $i <= $#array; $i++) { print $array[$i], "\n"; } However, the latter format is often more convenient if you need to keep track of the array index as well as iterating over the array: for ($i = 0; $i <= $#array; $i++) { print $array[$i], " is at index ", $i, "\n"; } is more succinct than: $i = 0; foreach $item (@array) { print $item, " is at index ", $i, "\n"; $i++; } The addition of an implicit counter variable in C<for> statements would lead to a more elegant syntax. It is proposed that the deprecated variable C<$#> should be used for this purpose due to its mnemonic association with C<$#array>. For example: foreach $item (@array) { print $item, " is at index ", $#, "\n"; } The variable C<$#> currently holds the output format for printed numbers. =head1 IMPLEMENTATION Not sure. However, consideration would have to be given to nested C<for> statements and how the variable would be affected by C<local>. =head1 REFERENCES perlvar Alex Rhomberg proposed an implicit counter variable on clpm: http://x53.deja.com/getdoc.xp?AN=557218804&fmt=text and http://x52.deja.com/threadmsg_ct.xp?AN=580369190.1&fmt=text Craig Berry suggested C<$#>: http://x52.deja.com/threadmsg_ct.xp?AN=580403316.1&fmt=text
