Хм. Давайте посмотрим на это. Я думаю, что это ужасный Perl, но другие явно не согласны. Есть много людей, которые имеют проблемы с unless
(что означает просто if not
) и в подобных ситуациях я сочувствую: есть просто слишком много происходит
Вот все это
unless (@{ $avl->Rates() || [] }) {
if (!$nobar) { push @rptmp, 'BAR' unless @rptmp; }
}
Прежде всего я хотел бы извлечь звоните в Rates
как этот
my $rates = $avl->Rates();
unless (@{ $rates || [] }) {
if (!$nobar) { push @rptmp, 'BAR' unless @rptmp; }
}
Я не знаю, что $avl
может быть, но это выглядит как его метод Rates
будет возвращать либо повторно массива или false Значение - возможно undef
. Таким образом, выражение $rates || []
присваивает значение false к ссылке на массив энтути. Теперь ограждающие @{ ... }
баллончика разыменовать него безопасно в любом случае
Тест пуст ли массив, и я хотел бы написать
unless ($rates and @$rates)
т.е. если метод Rates
не дал истинное значения а, и это было ссылка на непустой массив
Теперь у нас есть внутренний оператор с другим unless
, за исключением того, что на этот раз он написан как if not
, а внутри него есть является реальным unless
if (!$nobar) {
push @rptmp, 'BAR' unless @rptmp;
}
Внутреннее утверждение прост. Он проверяет @rptmp
, что верно, если массив не пуст, и толкает BAR
на него только если он пуст
вмещающих условных проверок, что, по-видимому вариант $nobar
, и если это верно то BAR
никогда не помещается в массив, независимо от каких-либо других условий
Я бы реорганизовать все это таким образом, извлекая вызов метода в отдельности и с помощью unless
по всей
my $rates = $avl->Rates;
unless ($rates and @$rates) {
unless ($nobar) {
push @rptmp, 'BAR' unless @rptmp;
}
}
Если вы unless
-phobic, то вот версия, которая использует только if
повсюду, но я считаю его менее читаемым
my $rates = $avl->Rates;
if (not $rates or @$rates == 0) {
if (not $nobar) {
push @rptmp, 'BAR' if @rptmp == 0;
}
}
Я надеюсь, что помогает
Это ужасно Perl – Borodin