@array = ( [ "a", "b", "c", ], [ "1", "2", "3", "4", ], [ "x", "y", ], ["A","B","C"] ); our @initial_array = @{$array[0]}; our $i = 1 ; $stop = scalar (@array) ; recurse () ; sub recurse () { $k = 0 ; foreach (@initial_array) { $firstelement = $_ ; @next_array = @{$array[$i]} ; foreach (@next_array) { $combination[$k]= $firstelement.$_ ; $k++ ; } } @initial_array = @combination ; $i++ ; if ( $i == $stop ) { print " @combination "; exit ; } else { recurse () ; } } output ______ a1xA a1xB a1xC a1yA a1yB a1yC a2xA a2xB a2xC a2yA a2yB a2yC a3xA a3xB a3xC a3yA a3yB a3yC a4xA a4xB a4xC a4yA a4yB a4yC b1xA b1xB b1xC b1yA b1yB b1yC b2xA b2xB b2xC b2yA b2yB b2yC b3xA b3xB b3xC b3yA b3yB b3yC b4xA b4xB b4xC b4yA b4yB b4yC c1xA c1xB c1xC c1yA c1yB c1yC c2xA c2xB c2xC c2yA c2yB c2yC c3xA c3xB c3xC c3yA c3yB c3yC c4xA c4xB c4xC c4yA c4yB c4yC