在下面的代码示例中,我试图获取一个whois语句。它偶尔会抛出超时异常。从PerlDoc开始,它表示在$Net::Whois::Raw::CHECK_FAIL = 1;
设置为1
的情况下,它应该返回undef
。
我用eval封装了whois所以它不会破坏脚本,然后我添加了sleep
然后我再次尝试获取whois。但它会发出警告" ...isn't numeric in numeric eq (==)
"。
所以再次,我取消运行,当它到达if
时,它仍然执行那里的代码,并抛出我上面提到的错误。如何在undef
发生时安全地评估它?
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Net::Whois::Raw;
#use Net::Whois::Parser;
use Data::Dumper;
$Net::Whois::Raw::OMIT_MSG = 2;
$Net::Whois::Raw::CHECK_FAIL = 1;
$Net::Whois::Raw::TIMEOUT = 30;
my $domainName = "google.com";
my $domainInfo;
while (1) {
eval {
$domain_info = whois($domainName);
};
if (undef == $domain_info) {
sleep (10);
eval {
$domain_info = whois($domainName);
};
}
}
答案 0 :(得分:6)
==
执行数值比较。如果不是,它的操作数被强制转换为数字。在这里使用==
是不合适的。要检查是否定义了标量,请使用defined
。
my $domain_info;
while (1) {
$domain_info = eval { whois($domainName) };
last if defined($domain_info);
sleep(10);
}
答案 1 :(得分:4)