#!/usr/bin/env perl use strict; use warnings; use Benchmark 'cmpthese'; for my $arrsize (1e5, 1e6, 1e7) { print "Source array has $arrsize elements\n"; my @x; push @x, rand for 1..$arrsize; cmpthese (1e1, { BUK => sub { my @y; $y[ $_-1 ] = $x[ $_-1 ] - $x[ $_ ] for 1 .. $#x; }, ike1 => sub { my @y; $y[ $_ ] = $x[ $_ ] - $x[ $_+1 ] for 0 .. $#x-1; }, ike2 => sub { my @y = @x; $y[ $_ ] -= $y[ $_+1 ] for 0 .. $#y-1; pop @y; }, while => sub { my @y; my $i = $#x; $y[ $i ] = $x[ $i ] + $x[ --$i ] while $i; }, }); print '-' x 80 . "\n"; }