use Data::Dumper; use Storable qw/dclone/; my @a = (1,2,3,4,6); $Data::Dumper::Indent=0; print Dumper(increment(increment(\@a))), "\n"; sub increment{ my $d = shift; my @b; for my $i (1..$#$d){ my @a = @$d[$i-1..$i]; push @b, dclone \@a; } return \@b; } __END__ $VAR1 = [[[1,2],[2,3]],[[2,3],[3,4]],[[3,4],[4,6]]];