my @list; $list[0]=[1,2,6]; $list[1]=[4,5]; $list[2]=[7,3]; sub combin { @_ or return []; my $l = shift; map { my $n = $_; map { [ $n, @$_ ] } combin(@_) } @$l } my @comb = combin(@list); print "@$_\n" for @comb;