sub generate { my $min = shift; my @arrays = grep @$_, @_; $min -= @arrays; return if $min > 0; my @current = (""); for my $array (@arrays) { $min++; @current = map { my $n = $_; length() < $min ? () : $_, map $n.$_, @$array; } @current; } return @current; }