Size: a a a

2020 July 21

a

allter in Modern::Perl
Alexey Ugnichev
Очень редкий случай.
Весьма частый, если в обработчиках исключений у вас могут вылететь исключения, а вы после этого будете использовать $@.

Но лучше использовать Try::Tiny...
источник

AU

Alexey Ugnichev in Modern::Perl
allter
Весьма частый, если в обработчиках исключений у вас могут вылететь исключения, а вы после этого будете использовать $@.

Но лучше использовать Try::Tiny...
Ну там стоит внимательно почитать, для чего и как используется local $@.
источник

a

allter in Modern::Perl
Alexey Ugnichev
Ну там стоит внимательно почитать, для чего и как используется local $@.
В общем, КМК, в прикладном коде просто не должно быть своих local $@... Вот если приходится работать с легаси, где уже есть что угодно, а рефакторить дорого, то от eval { 1; } or do {}; не отвертеться.
источник

AU

Alexey Ugnichev in Modern::Perl
Лучше всё же почитать ;)
источник

MA

Mons Anderson in Modern::Perl
> eval { dangerous_effectful_things; } то вариант с "or do {}" не сможет ничего сделать.

с какой радости or do {} не сможет ничего сделать?
источник

a

allter in Modern::Perl
А как он стриггерится? Я имею в виду, если кто-то заэвалит там, где это небезопасно?
источник

DF

Denis F in Modern::Perl
Камрады, а можни ли как-то узнать из какого пакета вызывается метод? У меня есть класс который отнаследован от другого и мне надо понять откуда метод берется.
источник

MA

Mons Anderson in Modern::Perl
get_linear_isa + can и в цикле проверять на равенство
источник

DF

Denis F in Modern::Perl
Он показывает то же самое что в коде написано. Какая-то блин магическая херня у меня происходит
источник

DF

Denis F in Modern::Perl
Дамп выдает правильных парентов, но при этом при вызове метода вылезает вообще левая ошибка и ни единой строки из дебга который я в метод напихал
источник

MA

Mons Anderson in Modern::Perl
my $coderef = $self->can('method') вернёт указатель на реально исполняемую функцию
$coderef == \&YourPackage::method может проверить на метод пакета
источник

DF

Denis F in Modern::Perl
Dumper с deparse говорит что там моя функция лежит в кодерефе
источник

DF

Denis F in Modern::Perl
магия какая-то
источник

ТО

Тигран Оганесян... in Modern::Perl
в caller -е нету?
источник

DF

Denis F in Modern::Perl
В плане? caller который я внутрь метода сунул не вызывается
источник

DF

Denis F in Modern::Perl
coderef который я из объекта вытащил показывает точно тот который и должен работать
источник

MA

Mons Anderson in Modern::Perl
а пример можешь показать?
источник

DF

Denis F in Modern::Perl
get_linear_isa: $VAR1 = [
         'My::Package::SomePackage',
         'My::Package::Some::Base',
         'My::Package::Base'
       ];

$VAR1 = sub {
           package My::Package::Base;
           use warnings;
           use strict;
           die caller();
           my $self = shift();
           ...
}
источник

DF

Denis F in Modern::Perl
вот так дамп выглядит, код в sub { точный код моего метода. Но при этом die caller() не вызывается, вместо него вызывается какая-то левая хрень
источник

MA

Mons Anderson in Modern::Perl
die не вызывается?
источник