如何在Perl中运行whois时测试undef?

时间:2015-08-20 19:38:00

标签: perl variables return whois

在下面的代码示例中,我试图获取一个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);
        };
    }
}

2 个答案:

答案 0 :(得分:6)

==执行数值比较。如果不是,它的操作数被强制转换为数字。在这里使用==是不合适的。要检查是否定义了标量,请使用defined

my $domain_info;
while (1) {
    $domain_info = eval { whois($domainName) };
    last if defined($domain_info);
    sleep(10); 
}

答案 1 :(得分:4)

替换

 if (undef == $domain_info) { 

if (not defined $domain_info) { 

检查变量是否不是defined

==用于比较两个数字。