use List::Util q(shuffle); use Getopt::Std; getopts('ds:'); $opt_s and srand $opt_s; @T{@$_} = shuffle @$_ for ([A..Z],[a..z]); $opt_d and %T = reverse %T; s{.}{$T{$&}//$&}eg, print for <>;