Perlのドキュメントから:
数値 0、文字列 '0' と "" 、空のリスト () 、および undef はすべて、ブール コンテキストでは false です。他のすべての値は true です。! による真の値の否定 or not は特別な false 値を返します。文字列として評価される場合は "" として扱われますが、数値として扱われる場合は 0 として扱われます。true または false を返すほとんどの Perl 演算子は、このように動作します。
言い換えれば、あなたの間違いは、ブール値の false が常に で表されると仮定していること0
です。Perl では、false は「空」で表されると言った方が正確です。これは、文脈によって意味が異なります。
これは、さまざまなコンテキストでクリーンなコードを可能にするため、便利です。
#evaluates false when there are no more lines in the file to process
while (<FILE>) { ... }
#evaluates false when there are no array elements
if (!@array) { ... }
#evaluates false if this variable in your code (being used as a reference)
#hasn't been pointed to anything yet.
unless ($my_reference) { ... }
等々...
あなたの場合、 false をゼロにする理由が明確ではありません。コード内のif()
ステートメントは、記述どおりに機能するはずです。何らかの理由で結果を明示的に数値にする必要がある場合は、次のようにすることができます。
my $numeric_true_false = ($response->is_success() ? 1 : 0);