2015-02-15 10:29 GMT+01:00 Ivan Petrov <[email protected]>:
> вот такой код
>
> 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 mailing list
[email protected] | http://moscow.pm.org