for(my $iSheet=0; $iSheet < $oBook->{SheetCount}; $iSheet++) { print "$oBook->{SheetCount}"; } #### use strict; use warnings; use Benchmark qw/ timethese cmpthese /; my $oBook = { SheetCount => 1000 }; cmpthese(timethese(10000, { 'For_C' => '&For_C', 'For_Set' => '&For_Set', })); sub For_C { my $var; for (my $iSheet=0; $iSheet < $oBook->{SheetCount}; $iSheet++) { $var = $iSheet; } } sub For_Set { my $var; for my $iSheet (0..$oBook->{SheetCount}-1) { $var = $iSheet; } } #### Benchmark: timing 10000 iterations of For_C, For_Set... For_C: 14 wallclock secs (14.33 CPU) @ 697.84/s (n=10000) For_Set: 7 wallclock secs (7.22 CPU) @ 1385.04/s (n=10000) Rate For_C For_Set For_C 698/s -- -50% For_Set 1385/s 98% -- #### $iSheet < $oBook->{SheetCount} # hash look up and comparison