Size: a a a

2020 February 28

c

cono in Modern::Perl
Andrey Konovalov
Чем мой велосипед хуже велосипеда более другого человека?
ты серьзно думаешь что вот это:
sub autoflush {
   my $old = SelectSaver->new(qualify($_[0], caller));
   my $prev = $|;
   $| = @_ > 1 ? $_[1] : 1;
   $prev;
}
сложнее твоего велосипеда?
источник

AK

Andrey Konovalov in Modern::Perl
cono
я про то что если вот этот $prv_sel_fh = select $fh; селект рванёт, то у тебя previous останется undef
Кстати, разумно. Тогда нельзя select'ить старый, если там undef
источник

AK

Andrey Konovalov in Modern::Perl
cono
ты серьзно думаешь что вот это:
sub autoflush {
   my $old = SelectSaver->new(qualify($_[0], caller));
   my $prev = $|;
   $| = @_ > 1 ? $_[1] : 1;
   $prev;
}
сложнее твоего велосипеда?
Да. И очевидно, почему.
источник

c

cono in Modern::Perl
Ок
источник

AK

Andrey Konovalov in Modern::Perl
В моих исходниках там ещё и indirect method call используется, что совсем пздц
источник

AK

Andrey Konovalov in Modern::Perl
5.24.1
источник

AK

Andrey Konovalov in Modern::Perl
Учёл замечания, поправил, на тестовой выборке работает правильно
источник
2020 February 29

OP

Oleg Pronin in Modern::Perl
cono
ну конкретно в твоём коде это не уместно, потому что если print '', вернёт false, у нас случится die.
но проверять случился ил exception, надо по $@, а не по тому что вернул eval
Неправильно, проверять упал ли eval по $@ нельзя. Она иногда может отсутствовать даже если код упал.  Правильная проверка по возвращаемому значению. Только по тому, которое всегда ганартированно есть когда евал не вылетел.
my $ok = eval { code...; 1 };
unless ($ok) {
   say « eval died: $@« ;
    ...
}
источник

c

cono in Modern::Perl
Wat?
источник

c

cono in Modern::Perl
My $ok = eval { 0 };
источник

c

cono in Modern::Perl
Приведи пример когда нет $@
источник

c

cono in Modern::Perl
Ну и почитай доку по eval
источник

О

Оскар in Modern::Perl
perl -E ' say eval { eval { die "XXX"; }; }; say $@;'
источник

c

crux in Modern::Perl
Оскар
perl -E ' say eval { eval { die "XXX"; }; }; say $@;'
Вариант c $ok в этом случае тоже не поможет
источник

VG

Vadim Goncharov in Modern::Perl
вот за всеми этими случаями и существуют верно проверяющие обертки типа Try::Tiny
источник

c

cono in Modern::Perl
Оскар
perl -E ' say eval { eval { die "XXX"; }; }; say $@;'
Этот пример не уместный это же эксепшн пропагейшн
источник

О

Оскар in Modern::Perl
Нужен был пример – я привел. Полагаю, комментарий о ненадежности $@ был именно про это и невозможность контролировать все и вся и что там в коде, завернутом в eval неизвестно
источник

Тм

Товарищ майор in Modern::Perl
cono
Этот пример не уместный это же эксепшн пропагейшн
Он был бы неуместным, если бы не такое не встречалось
источник

AK

Andrey Konovalov in Modern::Perl
А тем временем скоро выйдет новый, революционный MRI!
источник

AP

Anton Petrusevich in Modern::Perl
cono
Wat?
Насколько я помню, речь про иксепшен в деструкторе
источник