3

我正在使用LWP::UserAgent如下

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

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

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

我面临的问题is_success()是返回空白。我期待1(真)或0(假)。我在这里做错了什么?print说法对吗?

4

3 回答 3

5

0在 Perl 中不返回任何东西是正确且常用的方法来从函数返回错误结果,当您只需要逻辑错误结果时不要指望文字数字。您的请求很可能以非 2xx 或 3xx 代码返回。

于 2012-10-15T10:38:57.527 回答
3

Perl 文档

数字 0、字符串 '0' 和 "" 、空列表 () 和 undef 在布尔上下文中都是错误的。所有其他值都为真。对真实值的否定!或不返回一个特殊的假值。当作为字符串求值时,它被视为 "" ,但作为数字,它被视为 0。大多数返回 true 或 false 的 Perl 运算符都以这种方式运行。

换句话说,您的错误是假设 boolean 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 回答