Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用LWP:UserAgent时,$response->;成功返回空白吗_Perl_Http_Cpan_Lwp - Fatal编程技术网

Perl 使用LWP:UserAgent时,$response->;成功返回空白吗

Perl 使用LWP:UserAgent时,$response->;成功返回空白吗,perl,http,cpan,lwp,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(真)或0(假)。我做错了什么?print语句正确吗?在Perl中,不返回任何内容是从函数返回假结

我使用的是
LWP::UserAgent
如下

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

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

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

我面临的问题是
is_success()
返回空白。我期望
1
(真)或
0
(假)。我做错了什么?
print
语句正确吗?

在Perl中,不返回任何内容是从函数返回假结果的正确且常用的方法,当您只需要逻辑假结果时,不要期望使用literal
0
number。您的请求很可能是以非2xx或3xx代码返回的。

来自:

数字0、字符串“0”和“”、空列表()和未定义 在布尔上下文中都为false。所有其他值均为真。 对真值的否定!或not返回一个特殊的假值。 当作为字符串计算时,它被视为“”,但作为数字,它 被视为0。大多数返回true或false的Perl运算符的行为 这边走

换句话说,您的错误是假定布尔值false总是由
0
表示。更准确的说法是,在Perl中,false由“empty”表示,其含义取决于上下文

这很有用,因为它允许在各种上下文中使用干净的代码:

#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) { ... }

根据评论中的讨论:

$response->status_line 
实际返回的
500无法连接到数据库。

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


使用
$response->status\u line
查找代码失败的确切位置。

我觉得您的代码很好。您的web服务器是否违抗地返回给定请求的HTTP状态码(使用类似于Firefox的LiveHeaders的内容进行验证)?实际的请求是什么,或者是对专用服务器的请求?
$response->status\u line
给了你什么?@didster这里空白的意思是
FALSE
?@Drt,是的。不返回任何内容是Perl中表示false的常用方法,尽管0或空字符串也可以;o) 。我不会太注意perl中的库是否返回0或表示false的内容,例如空字符串。它们在一个方面并不一致——例如,许多人使用
unde
表示false。最主要的是,它没有回归真实。is_的成功归结为在
HTTP::Status
中的调用,就像这样
{$\u0]>=200&&$\u0]<300;
基本上说是200-299之间的响应代码。你能试着
is_error()
来检查它是否有错误或
Status\u line()
$response->status_line