我認爲$model->test
應該返回一個true或false值。
除非明確指出假值爲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代碼的頂部,就像你應該。) –