Я предполагаю, что $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 или новее, вы можете использовать оператор определенный-или (//
) .
my $review = $model->test // !1;
На более старом Perl для этого потребуется более одного оператора .
my $review = $model->test;
$review = !1 unless defined $review;