use strict; use warnings; use Benchmark qw(cmpthese); my @template = (1) x 200; cmpthese ( -10, { 'push pop', sub {pushPop ();}, 'push shift', sub {pushShift ();}, 'unshift pop', sub {unshiftPop ();}, 'unshift shift', sub {unshiftShift ();}, } ); sub pushPop { my @from = @template; my @to; for (0..100) { push @to, pop @from for @from; push @from, pop @to for @to; } } sub pushShift { my @from = @template; my @to; for (0..100) { push @to, shift @from for @from; push @from, shift @to for @to; } } sub unshiftPop { my @from = @template; my @to; for (0..100) { unshift @to, pop @from for @from; unshift @from, pop @to for @to; } } sub unshiftShift { my @from = @template; my @to; for (0..100) { unshift @to, shift @from for @from; unshift @from, shift @to for @to; } } #### Rate unshift shift push pop unshift pop push shift unshift shift 129/s -- -0% -4% -6% push pop 129/s 0% -- -3% -6% unshift pop 134/s 4% 3% -- -2% push shift 137/s 6% 6% 2% --