URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 3074
[ Назад ]

Исходное сообщение
"Транслитерация рус-англ.......проблеммка"

Отправлено Namich , 11-Фев-05 13:16 
Сразу скажу, раньше с Perl не был знаком

мне нужно транслитерировать строку с русского на английский.....
вот мой скрипт

#!c:\perl\bin\perl

use CGI qw/:standard/;

my $message = param(TEXTIN);


%hash = (
    'а' => 'a',
    'б' => 'b',
    'в' => 'v',
    'г' => 'g',
    'д' => 'd',
    'е' => 'e',
    'ё' => 'yo',
    'ж' => 'zh',
    'з' => 'z',
    'и' => 'i',
    'й' => 'j',
    'к' => 'k',
    'л' => 'l',
    'м' => 'm',
    'н' => 'n',
    'о' => 'o',
    'п' => 'p',
    'р' => 'r',
    'с' => 's',
    'т' => 't',
    'у' => 'u',
    'ф' => 'f',
    'х' => 'h',
    'ц' => 'c',
    'ч' => 'ch',
    'ш' => 'sh',
    'щ' => 'sch',
    'ы' => 'y',
    'э' => 'e',
    'ю' => 'yu',
    'я' => 'ya',
    ' ' => ' ',
    '.' => '.');


@letters = split //, $message;
for (@letters){$_mes = $hash{$_mes}};

print $mes;

после обработки выдаёт : Error. Script return nothing


Содержание

Сообщения в этом обсуждении
"Транслитерация рус-англ.......проблеммка"
Отправлено allez , 11-Фев-05 13:28 
Измени цикл:
------------------------------
for (@letters) {
$mes = $hash{$_};
print $mes;
}
------------------------------
и будет тебе счастье.

"Транслитерация рус-англ.......проблеммка"
Отправлено Namich , 11-Фев-05 13:40 
>Измени цикл:
>------------------------------
>for (@letters) {
>$mes = $hash{$_};
>print $mes;
>}
>------------------------------
>и будет тебе счастье.


а если вначале определить, что my $message = "привет";
и убрать @letters = split //, $message;

то какое условие цикла будет?


"Транслитерация рус-англ.......проблеммка"
Отправлено allez , 11-Фев-05 13:50 
А зачем?

"Транслитерация рус-англ.......проблеммка"
Отправлено Namich , 11-Фев-05 14:07 
>А зачем?

я хочу проверить как будет работать с фиксированной строкой, а потом уж параметр передавать буду

мне , к примеру, нужно "привет" перевести в "privet"


"Транслитерация рус-англ.......проблеммка"
Отправлено PoizOn , 11-Фев-05 16:00 
>>А зачем?
>
>я хочу проверить как будет работать с фиксированной строкой, а потом уж
>параметр передавать буду
>
>мне , к примеру, нужно "привет" перевести в "privet"
вот это:
@letters = split //, $message;
for (@letters){$_mes = $hash{$_mes}};

print $mes;

замени на

foreach (keys %hash) {
$message=~s/$_/$hash{$_}/g if($message=~m/$_/g);
}

print $message;

и убери элемент '.' из хэша - точку-то зачем транслитерировать??? :)


"Транслитерация рус-англ.......проблеммка"
Отправлено PoizOn , 11-Фев-05 16:02 
>>А зачем?
>
>я хочу проверить как будет работать с фиксированной строкой, а потом уж
>параметр передавать буду
>
>мне , к примеру, нужно "привет" перевести в "privet"
вот это:
@letters = split //, $message;
for (@letters){$_mes = $hash{$_mes}};

print $mes;

замени на

foreach (keys %hash) {
$message=~s/$_/$hash{$_}/g if($message=~m/$_/g);
}

print $message;

и убери элемент '.' из хэша - точку-то зачем транслитерировать??? :)



"Транслитерация рус-англ.......проблеммка"
Отправлено Namich , 14-Фев-05 09:21 
>>>А зачем?
>>
>>я хочу проверить как будет работать с фиксированной строкой, а потом уж
>>параметр передавать буду
>>
>>мне , к примеру, нужно "привет" перевести в "privet"
>вот это:
>@letters = split //, $message;
>for (@letters){$_mes = $hash{$_mes}};
>
>print $mes;
>
>замени на
>
>foreach (keys %hash) {
>$message=~s/$_/$hash{$_}/g if($message=~m/$_/g);
>}
>
>print $message;
>
>и убери элемент '.' из хэша - точку-то зачем транслитерировать??? :)


Огромное спасибо!!!!!!!
Выручил....работает супер!!!