my @a=('', 'a'..'z', 'A'..'Z', '_'); v("",3,\@a); sub v { my ($p,$n,$a)=@_; if ($n) { --$n; v($p.$_,$n,$a) foreach (@$a); } else { print $p,"\n" } }