Простая транслитерация в Perl
Нужно мне было как-то транслитерировать кучку текста из кириллицы в латиницу. Попутно в тексте встречались и разные чехи-французы-немцы, которых трогать не следовало. Для транслитерации использовался BS 2979:1958, без диакритики (так как обратная транслитерация не нужна) и тс заменяется на t-s, чтобы не путать с ц (ts).
В Perl существует специальный оператор для транслитерации: tr///
. После недолгого его изучения помучавшись стало очевидно, что проще все сделать в лоб, поэтому я использую следующую массивную конструкцию:
while (defined $textline) { $textline =~ s/А/A/g; $textline =~ s/а/a/g; $textline =~ s/Б/B/g; $textline =~ s/б/b/g; $textline =~ s/В/V/g; $textline =~ s/в/v/g; $textline =~ s/Г/G/g; $textline =~ s/г/g/g; $textline =~ s/Д/D/g; $textline =~ s/д/d/g; $textline =~ s/Е/E/g; $textline =~ s/е/e/g; $textline =~ s/Ё/E/g; $textline =~ s/ё/e/g; $textline =~ s/Ж/Zh/g; $textline =~ s/ж/zh/g; $textline =~ s/З/Z/g; $textline =~ s/з/z/g; $textline =~ s/И/I/g; $textline =~ s/и/i/g; $textline =~ s/Й/I/g; $textline =~ s/й/i/g; $textline =~ s/К/K/g; $textline =~ s/к/k/g; $textline =~ s/Л/L/g; $textline =~ s/л/l/g; $textline =~ s/М/M/g; $textline =~ s/м/m/g; $textline =~ s/Н/N/g; $textline =~ s/н/n/g; $textline =~ s/О/O/g; $textline =~ s/о/o/g; $textline =~ s/П/P/g; $textline =~ s/п/p/g; $textline =~ s/Р/R/g; $textline =~ s/р/r/g; $textline =~ s/ТС/T-S/g; $textline =~ s/Тс/T-s/g; $textline =~ s/тс/t-s/g; $textline =~ s/С/S/g; $textline =~ s/с/s/g; $textline =~ s/Т/T/g; $textline =~ s/т/t/g; $textline =~ s/У/U/g; $textline =~ s/у/u/g; $textline =~ s/Ф/F/g; $textline =~ s/ф/f/g; $textline =~ s/Х/Kh/g; $textline =~ s/х/kh/g; $textline =~ s/Ц/Ts/g; $textline =~ s/ц/ts/g; $textline =~ s/Ч/Ch/g; $textline =~ s/ч/ch/g; $textline =~ s/Ш/Sh/g; $textline =~ s/ш/sh/g; $textline =~ s/Щ/Shch/g; $textline =~ s/щ/shch/g; $textline =~ s/Ь/'/g; $textline =~ s/ь/'/g; $textline =~ s/Ы/Y/g; $textline =~ s/ы/y/g; $textline =~ s/Ъ/''/g; $textline =~ s/ъ/''/g; $textline =~ s/Э/E/g; $textline =~ s/э/e/g; $textline =~ s/Ю/Yu/g; $textline =~ s/ю/yu/g; $textline =~ s/Я/Ya/g; $textline =~ s/я/ya/g; }