use strict; use warnings; use Data::Dump qw/pp dd/; my $from = q( -/:-@[-`{-}); my $to = q[`-{/" \-]; my @from = expand($from); my @to = expand($to); my %tr; @tr{@from} = @to; pp \%tr; sub expand { my $replace = shift; my $scale = join '' , 0..9,'a'..'z','A'..'Z'; my $code = qq( \$scale =~ tr($scale)($replace)d ); #pp $code; eval $code or warn $@; return split '', $scale; }