use Benchmark qw(cmpthese);
my $size = $ARGV[0] || 1000;
my @array = (1..$size);
sub undef_it {
undef @array;
$array[$_]=$_ foreach (0..$size-1);
return;
}
sub empty_it {
@array = ();
$array[$_]=$_ foreach (0..$size-1);
return;
}
sub empty_elements {
undef $_ for @array;
$array[$_]=$_ foreach (0..$size-1);
return;
}
sub assign_list_of_undefs {
@array = (undef) x $size;
$array[$_]=$_ foreach (0..$size-1);
return;
}
sub undef_resize {
undef @array; $#array = $size;
$array[$_]=$_ foreach (0..$size-1);
return;
}
sub empty_resize {
@array = (); $#array = $size;
$array[$_]=$_ foreach (0..$size-1);
return;
}
cmpthese( -10, {
undef_it => \&undef_it,
empty_it => \&empty_it,
empty_elements => \&empty_elements,
assign_list_of_undefs => \&assign_list_of_undefs,
undef_resize => \&undef_resize,
empty_resize => \&empty_resize,
});
####
V:\Web\Distributor>c:\temp\benchEmpty.pl 100
Rate undef_it assign_list_of_undefs empty_elements undef_resize empty_it empty_resize
undef_it 41651/s -- -1% -1% -4% -10% -10%
assign_list_of_undefs 41936/s 1% -- -0% -4% -10% -10%
empty_elements 41948/s 1% 0% -- -4% -10% -10%
undef_resize 43501/s 4% 4% 4% -- -6% -6%
empty_it 46415/s 11% 11% 11% 7% -- -0%
empty_resize 46509/s 12% 11% 11% 7% 0% --
V:\Web\Distributor>c:\temp\benchEmpty.pl 100
Rate undef_it empty_elements undef_resize assign_list_of_undefs empty_resize empty_it
undef_it 41006/s -- -3% -3% -5% -9% -11%
empty_elements 42097/s 3% -- -1% -3% -7% -9%
undef_resize 42406/s 3% 1% -- -2% -6% -8%
assign_list_of_undefs 43229/s 5% 3% 2% -- -4% -7%
empty_resize 45131/s 10% 7% 6% 4% -- -2%
empty_it 46280/s 13% 10% 9% 7% 3% --
V:\Web\Distributor>c:\temp\benchEmpty.pl
Rate assign_list_of_undefs empty_elements empty_resize undef_resize undef_it empty_it
assign_list_of_undefs 4540/s -- -2% -4% -6% -8% -8%
empty_elements 4621/s 2% -- -3% -5% -6% -7%
empty_resize 4745/s 5% 3% -- -2% -4% -4%
undef_resize 4841/s 7% 5% 2% -- -2% -2%
undef_it 4919/s 8% 6% 4% 2% -- -1%
empty_it 4951/s 9% 7% 4% 2% 1% --
V:\Web\Distributor>c:\temp\benchEmpty.pl 10000
Rate assign_list_of_undefs empty_elements undef_it undef_resize empty_it empty_resize
assign_list_of_undefs 447/s -- -2% -6% -6% -10% -10%
empty_elements 454/s 2% -- -5% -5% -8% -8%
undef_it 476/s 7% 5% -- -0% -4% -4%
undef_resize 477/s 7% 5% 0% -- -4% -4%
empty_it 494/s 11% 9% 4% 4% -- -0%
empty_resize 496/s 11% 9% 4% 4% 0% --
V:\Web\Distributor>c:\temp\benchEmpty.pl 10000
Rate empty_elements assign_list_of_undefs undef_it undef_resize empty_it empty_resize
empty_elements 454/s -- -0% -4% -6% -9% -10%
assign_list_of_undefs 456/s 0% -- -4% -6% -8% -9%
undef_it 473/s 4% 4% -- -2% -5% -6%
undef_resize 483/s 6% 6% 2% -- -3% -4%
empty_it 498/s 10% 9% 5% 3% -- -1%
empty_resize 504/s 11% 10% 6% 4% 1% --
####
@a = ()[0..50];
print $#a;