Benchmark: timing 1000 iterations of dimmesdale PU, dimmesdale loop, perlish... dimmesdale PU: 36 wallclock secs (34.87 usr + 0.09 sys = 34.96 CPU) dimmesdale loop: 43 wallclock secs (40.63 usr + 0.13 sys = 40.76 CPU) perlish: 35 wallclock secs (33.47 usr + 0.10 sys = 33.57 CPU) #### #!/usr/bin/perl -w # -*-Perl-*- use Benchmark; my @ary; sub init_val {$_[0]} sub dimmeloop { for($i = 0; $i <= 10_000; $i++) { $ary[$i] = init_val($i); } 1; } sub dimmeunroll { $idx = 0; for($i = 0; $i < 10_000; $i += 10) { $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); $ary[$idx++] = init_val($i); } 1; } sub tillys { @ary = map {init_val $_} (0..10000); 1; } timethese(1000,{ 'dimmesdale loop'=>"dimmeloop", 'dimmesdale PU'=>"dimmeunroll", 'perlish'=>"tillys", });