use Data::Dumper; my $set_group_size = 2; my @list = 1..5; print Dumper ([ sumList($set_group_size,@list) ]); sub sumList { my @sumlist; my $size = shift; while ( @_ ) { my @current = splice @_, 0, $size-1; foreach my $item (@_) { push ( @sumlist, [@current,$item] ); } unshift (@_, @current[1..$#current]); } return @sumlist; }