#! perl -slw use strict; ## Adjust to suit your requirements my %types = ( lower => [ 'a'..'z' ], upper => [ 'A'..'Z' ], number=> [ '0'..'9' ], char => [ 'a'..'z', 'A'..'Z', '0'..'9' ], ); print join ' ', map{ my( $type, $n ) = $_ =~ m[(\w+) length = (\d+)]; join'', map{ $types{ $type }[ rand @{ $types{ $type } } ] } 1 .. $n; } @ARGV; __END__ P:\test>413131 "char length = 4" "number length = 3" "lower length = 6" tAwY 828 xkppno [12:35:08.56] P:\test>413131 "char length = 1" "number length = 10" "upper length = 2" j 3625181636 OB