[Moscow.pm] UTF-8, локализованные сообщения об ошибках , как решить?

Alexander Lourier aml на rulezz.ru
Сб Фев 14 12:20:44 PST 2009


On Saturday 14 February 2009 20:34:07 Dmitry E. Oboukhov wrote:

[skip]
> print "$!\n" unless $c;
> print decode utf8=>"$!\n" unless $c;
>
> работает так:
>
> perl test.pl
> Ð Ñоединении оÑказано
> В соединении отказано
>
>
> То бишь решение вроде бы и есть, но такое некрасивое что жуть.
>
> 1. нельзя ли глобальной прагмой какой этот вопрос решить?

Посмотрел исходники, как обрабатывается $! - он просто берет strerror из 
сишной библиотеки, и возвращает. Она, естественно, и не догадывается о 
внутреннем представлении utf8-строк в Perl. Если есть желание патчить, самое 
правильное место - mg.c в обрабочике Perl_magic_get - $! и $^E. Там где 
загружается значение скаляра, надо установить флаг utf8. Без патча исходников 
AFAIK перехватить обработку магических переменных невозможно.

> 2. нельзя ли отключить локализацию сообщений об ошибках?

use POSIX;
POSIX::setlocale(&POSIX::LC_MESSAGES, 'C');


Подробная информация о списке рассылки Moscow-pm