[Moscow.pm] Иногда проваливается сквозь eval
Maxim Vuets
maxim.vuets на gmail.com
Вс Фев 15 10:14:18 PST 2015
2015-02-15 10:29 GMT+01:00 Ivan Petrov <i.petro.77.00 на gmail.com>:
> вот такой код
>
> 32 eval { utf8::downgrade $str } if utf8::is_utf8 $str;
> 33 warn $@ if $@;
>
> Изредка (очень редко) но падает в строке 1
> то есть глобальный eval ловит ошибку
>
> Wide character in subroutine entry at FILE line 32
Подозреваю, что у вас что-то неладно с локализацией $@. Грубый пример:
(1) mvuets на ilosonaloje:~$ cat -n doubleeval.pl
1 use v5.20;
2 use warnings;
3 eval {
4 eval { die "shenanigans!" };
5 die $@;
6 };
7 say "$@";
(1) mvuets на ilosonaloje:~$ perl doubleeval.pl
shenanigans! at doubleeval.pl line 4.
Сообщение говорит о строке 4, но фактически выброс был на строке 5.
Кстати, такие eval-ы безопаснее писать так: не опирайтесь на значение
$@, а явно проверяйте, что возвращает eval.
1 use v5.20;
2 use warnings;
3 eval { die "shenanigans!"; 1 }
4 or warn "$@";
Подробная информация о списке рассылки Moscow-pm