Destio небольшой блог

   

Простая транслитерация в 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;
	}

Ближайшие сообщения

Похожие сообщения

Ответить