use Benchmark qw( cmpthese ); cmpthese( -3, { del => sub { my @B = (1..100); delete @B[0,-1]; }, shiftNpop => sub { my @B = (1..100); shift @B; pop @B; }, sliceAssi => sub { my @B = (1..100); @B = @B[1..$#B-1]; }, splice => sub { my @B = (1..100); splice @B,0,1; splice @B,-1; } }); __END__ Benchmark: running del, shiftNpop, sliceAssi, splice, each for at least 3 CPU seconds... del: 4 wallclock secs ( 3.08 usr + 0.00 sys = 3.08 CPU) @ 67710.85/s (n=208414) shiftNpop: 3 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 68042.44/s (n=208414) sliceAssi: 3 wallclock secs ( 3.20 usr + 0.00 sys = 3.20 CPU) @ 18594.44/s (n=59558) splice: 3 wallclock secs ( 3.09 usr + 0.00 sys = 3.09 CPU) @ 67360.70/s (n=208414) Rate sliceAssi splice del shiftNpop sliceAssi 18594/s -- -72% -73% -73% splice 67361/s 262% -- -1% -1% del 67711/s 264% 1% -- -0% shiftNpop 68042/s 266% 1% 0% --