我正在使用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
声明是对吗?
答案 0 :(得分:5)
在Perl中没有返回任何内容是正确和通常的方式从函数返回错误结果,当你只需要逻辑错误结果时,不要指望文字0
数字。您的请求很可能是使用非2xx或3xx代码返回的。
答案 1 :(得分:3)
数字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
找出代码失败的确切位置。