in reply to Of foreach loops and counting

For testing "every third iteration," I do this sometimes:

my $n = 0; foreach (@array) { next if I_dont_care_about($_); do_something_with ($_); print "." if !($n++ % 3); } print "\n";
If you aren't necessarily processing every item in the list, but only want to count the number of elements you process, then using a temporary variable as you were doing is a useful alternative to looping over the array indices. It also works when you're doing things like looping over hash keys, where you can't count on having a numeric index implicitly; or processing lines of a file with a while (<>) loop.

Update: KM, that is definitely true, and a more efficient and succinct way to count lines when you're interested in the total line count. The method I presented is still useful when you want to count the number of lines you processed, not the total line count so far.

Alan

Replies are listed 'Best First'.
RE: Re: Of foreach loops and counting
by KM (Priest) on Aug 09, 2000 at 20:29 UTC
    or processing lines of a file with a while (<>) loop.

    In that case, you can use $. (perldoc perlvar) to know what line you are in. For example:

    #!/usr/bin/perl while (<DATA>) { print $. . ": $_"; } __DATA__ a b c d e f g h i # Would display when run... $ ./test.pl 1: a 2: b 3: c 4: d 5: e 6: f 7: g 8: h 9: i

    Cheers,
    KM