[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