use strict; use warnings; use 5.010; my @lettersPerButton = ( 3, 3, 3, 3, 3, 4, 3, 4 ); my @buttons = map { ( $_ ) x shift @lettersPerButton } 2 .. 9; my %filterMap = map { $_ => shift @buttons } q{A} .. q{Z}; $filterMap{ lc( $_ ) } = $filterMap{ $_ } for q{A} .. q{Z}; my @toClean = qw{ GAV18 gAv18 peter Bill34 }; foreach my $filterClean ( @toClean ) { ( my $filter = $filterClean ) =~ s{([A-Za-z])}{$filterMap{ $1 }}g; say qq{$filterClean --> $filter}; } #### GAV18 --> 42818 gAv18 --> 42818 peter --> 73837 Bill34 --> 245534