使用LWP:UserAgent时,$ response-> is_success返回空白

时间:2012-10-15 10:08:35

标签: perl http cpan lwp

我正在使用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声明是对吗?

3 个答案:

答案 0 :(得分:5)

在Perl中没有返回任何内容是正确和通常的方式从函数返回错误结果,当你只需要逻辑错误结果时,不要指望文字0数字。您的请求很可能是使用非2xx或3xx代码返回的。

答案 1 :(得分:3)

来自Perl documentation

  

数字0,字符串'0'和“”,空列表()和undef   在布尔上下文中都是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) { ... }

等等......

在你的情况下,你不清楚为什么你想要假等于零。代码中的if()语句应该按照书面形式工作。如果由于某种原因需要结果显式数字,你可以这样做:

my $numeric_true_false = ($response->is_success() ? 1 : 0);

答案 2 :(得分:2)

来自评论中的讨论:

$response->status_line 

实际上已返回500 Can't Connect to database.

使用$response->is_success(),我无法理解db的响应。

使用$response->status_line找出代码失败的确切位置。