my %trans = (zero => 0, one => 1, ones => 11, two => 2, three => 3); my $words_re = join "|", map quotemeta, sort { length($b) <=> length($a) } keys %trans; $string =~ s/\b($words_re)\b/$trans{lc $1}/ig;