3

私はLWP::UserAgent以下のように使用しています

my $ua = LWP::UserAgent->new;

my $response = $ua->request ( ...);

if ( $response->is_success() )
{
...
}
print $response->is_success();

私が直面している問題は、is_success()空白を返すことです。1(TRUE) または0(FALSE)を期待していました。ここで何が間違っていますか?print発言は正しいですか?

4

3 に答える 3

5

何も返さないことは正しく、Perl で関数から false の結果を返す通常の方法0です。論理的な false の結果のみが必要な場合は、リテラルの数値を期待しないでください。リクエストは、2xx または 3xx 以外のコードで返される可能性が高いです。

于 2012-10-15T10:38:57.527 に答える
3

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);
于 2012-10-15T11:30:12.033 に答える
3

コメントの議論から:

$response->status_line 

実際に戻ってきた500 Can't Connect to database.

では$response->is_success()、db からの応答を理解できませんでした。

$response->status_lineコードが失敗した場所を正確に見つけるために使用 されます。

于 2014-05-26T11:29:49.717 に答える