sub mkPerms { my($n, $arr) = @_; return($n ? map { my $item=$_; map { $item . $_ } mkPerms($n-1, $arr) } @$arr : ""); } print $_ . "\n" for ( mkPerms(3, [ 'A'..'C' ]) );