use Time::HiRes qw(gettimeofday); use strict; use warnings; sub timeSub { my ($sub, @parms) = @_; my ($sec0, $micro0)=gettimeofday; my $name = $sub->(1000000, @parms); my ($sec1, $micro1)=gettimeofday; my $diff = 1000000*($sec1-$sec0) + $micro1-$micro0; print "$name:\t$diff microseconds\n"; } sub pushInit { my $loops = shift; my @x; for (my $i=0; $i<$loops; $i++) { push(@x, 1) } return "push"; } sub elInit { my $loops = shift; my @x; for (my $i=0; $i<$loops; $i++) { $x[$i] = 1 } return "\$a[\$i]"; } sub xInit { my $loops = shift; my @x = (1) x $loops; return "(1) x"; } # This method builds the array (1, 2, 3, ...), not (1, 1, 1, ...) sub dotInit { my $loops = shift; my @x = 1..$loops; return ".."; } foreach my $subR (\&pushInit, \&elInit, \&xInit, \&dotInit) { &timeSub($subR); } #### $ perl time-array-init.pl push: 171028 microseconds $a[$i]: 163881 microseconds (1) x: 51077 microseconds ..: 70115 microseconds