use warnings; use strict; my %trans = ( q{t'i} => 'ти', q{t'a} => 'тя', q{t'u} => 'тю', q{t'e} => 'те', ); my @signs = sort {length($b) <=> length($a)} keys %trans; @signs = map quotemeta($_), @signs; my $re = join '|', @signs, '.'; print "original: '$re' \n"; my ($cyril) = map qr{ $_ }xms, join ' | ', map quotemeta, sort { length($b) <=> length($a) } keys %trans ; print "suggested: $cyril \n"; my $text = "t'i don't understand t'any cyrillic."; print "raw: [$text] \n"; $text =~ s{ ($cyril) }{$trans{$1}}xmsgo; print "translation: [$text] \n"; #### c:\@Work\Perl\monks\nikop>perl xlate_cyrillic_1.pl original: 't\'e|t\'i|t\'u|t\'a|.' suggested: (?^msx: t\'e | t\'i | t\'u | t\'a ) raw: [t'i don't understand t'any cyrillic.] translation: [ти don't understand тяny cyrillic.]