Size: a a a

2020 March 22

AP

Anton Petrusevich in Modern::Perl
перлом то тормозновато
источник

AT

Artem Tepponen in Modern::Perl
Мне больше нравится $ap->{foo}-{bar}->baz() и там если нужна проверка, то их чуть меньше
источник

b

basiliscos in Modern::Perl
я кстати могу придумать контр-кейс. Понятно, что когда там другой объет (на к-м нет такого метода)? Или примитив?
источник

AP

Anton Petrusevich in Modern::Perl
Artem Tepponen
У тебя тут не структура данных, а структура вызовов. Иначе autovivification есть
автовивификация при присвоении только.
$ perl -E '$a = undef->{a}' 
Can't use an undefined value as a HASH reference at -e line 1.
источник

AT

Artem Tepponen in Modern::Perl
А ты в такой ситуации undef хочешь?
источник

AP

Anton Petrusevich in Modern::Perl
yes
источник

AT

Artem Tepponen in Modern::Perl
Не, я не согласен. Пусть падает
источник

AP

Anton Petrusevich in Modern::Perl
это никак не мешает ->, поскольку использование отдельного оператора означает, что пишуший знает что делает
источник

AT

Artem Tepponen in Modern::Perl
Иначе можно вообще никогда не падать
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
автовивификация при присвоении только.
$ perl -E '$a = undef->{a}' 
Can't use an undefined value as a HASH reference at -e line 1.
Автовивификация цепочки (!) при присвоении значния последнему.
источник

AT

Artem Tepponen in Modern::Perl
Неприятно, тут согласен
источник

AT

Artem Tepponen in Modern::Perl
Но иначе проще взять что-нибудь более типизированное, кмк
источник

AP

Anton Petrusevich in Modern::Perl
зачем что-то сильно типизированное для веба? где всё через джейсон и так...
источник

AT

Artem Tepponen in Modern::Perl
Про либы не знаю, но если в таоём объекте что-то не то оказалось, то цепочки - прекрасный способ поиметь пару дней дебага
источник

AP

Anton Petrusevich in Modern::Perl
Artem Tepponen
А ты в такой ситуации undef хочешь?
я, вообще, конкретно про вызов метода говорил. ситуация с хешами ещё туда-сюда, но с ними автовивификация бывает очень вредна
источник

AT

Artem Tepponen in Modern::Perl
В целом я с таким не сталкивался, умолкаю. Но очередные грабли
источник

AP

Anton Petrusevich in Modern::Perl
т.е. ты ожидаешь андеф в определённом ключе, и он был пустой, а после автовивификации уже внезапно нет
источник

AP

Anton Petrusevich in Modern::Perl
Artem Tepponen
В целом я с таким не сталкивался, умолкаю. Но очередные грабли
грабли чего? старый код не меняется. новый оператор только для нового кода, а там люди должны понимать что делают
источник

VG

Vadim Goncharov in Modern::Perl
Anton Petrusevich
проблема, как правило, при написании универсальных библиотек — тебе постоянно приходится проверять разные свойства параметров, что тебе передали. очень часто, если в середине цепочки случился андеф, то тебе пофиг на остаток — результат просто должен быть конечным андефом. поэтому, этот сахар очень полезный.
а шо с этим делают другие динамические языки?
источник

OP

Oleg Pronin in Modern::Perl
Anton Petrusevich
перлом то тормозновато
Если делать как ты сказал
«
$val = $foo->bar->baz->ceo if $foo && $foo->can('bar') && $foo->bar && $foo->bar->can('baz') && $foo->bar->baz && $foo->bar->baz->can('ceo');
«
То будет тормознуто понятно, тут по многу раз вызываются одни и теже методы.
Можно писать
$bar = $foo && $foo->bar;
$baz = $bar && $bar->baz;
...
К чему там был can я вообще не понял
источник