Я предполагаю, что $model->test
предполагается вернуть истинное или ложное значение.
Если не указано, что ложное значение равно undef
, метод может быть переписан, чтобы вместо этого вернуть другое ложное значение. Что бы сломало все, что только проверяет, определено ли значение.
(я думаю, что это ошибка, что метод возвращает undef
вместо канонического ложного значения.)
Так что лучший способ установить $review
это проверить правдивость возвращаемого значения; это не определенность.
my $review = $model->test ? 1 : '';
Я хотел бы указать, что в этом все еще есть ошибка. Если вы хотите использовать значение как число, оно будет выдавать предупреждения, если оно было ложным.
Чтобы исправить это, вы должны вернуть !1
(каноническое ложное значение), которое вернет значение, которое является строкой ''
, но также имеет числовое значение 0.
my $review = $model->test ? 1 : !1;
Обратите внимание, что это может быть упрощено просто:
my $review = !! $model->test; # invert it twice
Если вы хотите изменить значение только тогда, когда оно является ложным, вы можете использовать или оператор ||
.
my $review = $model->test || !1;
Если вы действительно хотите только знать, если он определен, или нет, почему бы вам не просто использовать defined
.
my $review = defined $model->test;
Если вы хотите изменить значение только тогда, когда оно не определено, и у вас есть Perl 5.10 или более поздней версии, вы можете использовать defined-or operator (//
).
my $review = $model->test // !1;
На старом Perl, что потребует более одного statement.
my $review = $model->test;
$review = !1 unless defined $review;
Вы действительно должны установить его в '1' не ' «» '. Оба они имеют одинаковое строковое представление ('' ''). Единственное различие заключается в том, что '' '' будет предупреждать, если вы попытаетесь использовать его как число, где как '! 1' не будет. (Предполагая, что у вас всегда есть 'использование предупреждений,' в верхней части каждого фрагмента кода Perl, как вы должны.) –