use strict; use warnings; use Data::Dumper; $Data::Dumper::Sortkeys = 1; $Data::Dumper::Indent = 0; sub array_fold { my $a1 = shift; my @a1 = @$a1; my $a2 = shift; my @a2 = @$a2; my $folder = shift || sub { [ @_ ] }; die "Arrays are not of the same size" unless scalar( @a1 ) == scalar( @a2 ); my @results; while( scalar( @a1 ) && scalar( @a2 ) ) { push @results, $folder->( shift( @a1), shift( @a2 ) ); } return @results; } my @a = qw( a b c d ); my @b = qw( A B C D ); my @results = array_fold( \@a, \@b ); print Dumper( { results => \@results } ), "\n"; my @results2 = array_fold( \@a, \@b, sub { "@_" } ); print Dumper( { results2 => \@results2 } ), "\n"; __END__ $VAR1 = {'results' => [['a','A'],['b','B'],['c','C'],['d','D']]}; $VAR1 = {'results2' => ['a A','b B','c C','d D']};