Forum Webscript.Ru

Программирование => Perl => Тема начата: Павел от 28 Августа 2001, 13:27:49

Название: Вопрос про locale
Отправлено: Павел от 28 Августа 2001, 13:27:49
Я делаю
use POSIX qw( locale_h );

setlocale( LC_ALL, \\\'ru_RU.win1251\\\' );

И никакого эффекта, например, не работает ucfirst, lc и т.д.

Почему так происходит, сервер не поддерживает локэйлы???
Название: Вопрос про locale
Отправлено: Chs от 29 Августа 2001, 10:13:33
Цитировать
Я делаю
use POSIX qw( locale_h );

setlocale( LC_ALL, \\\'ru_RU.win1251\\\' );

И никакого эффекта, например, не работает ucfirst, lc и т.д.

Почему так происходит, сервер не поддерживает локэйлы???

system(\\"locale\\",\\"-a\\");
Название: Вопрос про locale
Отправлено: Павел от 29 Августа 2001, 12:57:47
Ну хорошо, пусть system(\\\'locale\\\', \\\'-a\\\') работает. Но почему не работает мой вариант, ведь он должен же работать...:(
Название: Вопрос про locale
Отправлено: Chs от 29 Августа 2001, 14:01:52
Цитировать
Ну хорошо, пусть system(\\\'locale\\\', \\\'-a\\\') работает. Но почему не работает мой вариант, ведь он должен же работать...:(

:))
system(\\\'locale\\\', \\\'-a\\\') покажет установленные на сервере локали.
Вы уверены, что ru_RU.win1251 есть среди них?
Название: Вопрос про locale
Отправлено: Павел от 30 Августа 2001, 13:11:07
И каким образом system должна показать мне присутствующие локэйлы???
Название: Вопрос про locale
Отправлено: Chs от 30 Августа 2001, 13:36:59
Цитировать
И каким образом system должна показать мне присутствующие локэйлы???

print system(\\\'locale\\\', \\\'-a\\\');
Зависит он настроек сервера, но есть вероятность, что покажет в виде списка.:)
Если нет, то из shell: locale -a, если шела нет, то пытай админа каленым железом.:)
Название: Вопрос про locale
Отправлено: Павел от 30 Августа 2001, 13:44:24
print system( \\\'locale\\\', \\\'-a\\\' ) я естественно сделал сразу, мне вывелось 256. Мне это ни о чем не говорит. Через shell, например, у провайдер такой команды просто нет. Админа под рукой как назло тоже нет.:(
Название: Вопрос про locale
Отправлено: Chs от 30 Августа 2001, 14:25:36
Попробуй так:

#!/usr/bin/perl
print \\"Content-type: text/plain\\\\n\\\\n\\";
open(SYS,\\"locale -a |\\");
while()
{
print ;
}
close(SYS);
Название: Вопрос про locale
Отправлено: Fluke от 30 Августа 2001, 22:12:08
Есть другой путь. Если не хочешь куртыкаться с локалями, а это дело нудное, попробуй переписать необходимые тебе функции. Вот пример функции uc():

#!/usr/bin/perl -w

$key = \\"моя собственная функция UPPER CASE\\";

@upper = (\\\'А\\\',\\\'Б\\\',\\\'В\\\',\\\'Г\\\',\\\'Д\\\',\\\'Е\\\',\\\'Ё\\\',\\\'Ж\\\',\\\'З\\\',\\\'И\\\',\\\'Й\\\',\\\'К\\\',\\\'Л\\\',\\\'М\\\',\\\'Н\\\',\\\'О\\\',\\\'П\\\',\\\'Р\\\',\\\'С\\\',\\\'Т\\\',\\\'У\\\',\\\'Ф\\\',\\\'Х\\\',\\\'Ц\\\',\\\'Ч\\\',\\\'Ш\\\',\\\'Щ\\\',\\\'Ь\\\',\\\'Ы\\\',\\\'Ъ\\\',\\\'Э\\\',\\\'Ю\\\',\\\'Я\\\');
@lower = (\\\'а\\\',\\\'б\\\',\\\'в\\\',\\\'г\\\',\\\'д\\\',\\\'е\\\',\\\'ё\\\',\\\'ж\\\',\\\'з\\\',\\\'и\\\',\\\'й\\\',\\\'к\\\',\\\'л\\\',\\\'м\\\',\\\'н\\\',\\\'о\\\',\\\'п\\\',\\\'р\\\',\\\'с\\\',\\\'т\\\',\\\'у\\\',\\\'ф\\\',\\\'х\\\',\\\'ц\\\',\\\'ч\\\',\\\'ш\\\',\\\'щ\\\',\\\'ь\\\',\\\'ы\\\',\\\'ъ\\\',\\\'э\\\',\\\'ю\\\',\\\'я\\\');

foreach $i (0..32)
   {$key =~ s#$lower[$i]#$upper[$i]#g;}


print $key;

exit(0);

Аналогично пишется lc(). Ну а с lcfirst и т. д. попробуй разобраться сам.

С уважением Fluke.
Название: Вопрос про locale
Отправлено: Павел от 31 Августа 2001, 13:23:13
Уважаемый, Fluke. Именно так я сразу и сделал:D Просто было интересно разобраться с локэйлами
Название: Вопрос про locale
Отправлено: Fluke от 01 Сентября 2001, 18:32:01
Уважаемый Павел,
Спасибо за ответ.
Не хочется выглядеть снобом, но locale произносится и пишется как локаль, а не локейл (словарь Webster\\\'а).

Кстати модификатор i к командам типа m/../../ и s/../../ тоже не работает без локалей, а как его переписать я не знаю.

С уважением Fluke.