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

Kin*_*oul 1 variables perl whois return

在下面的代码示例中,我试图获取一个whois语句.它偶尔会抛出超时异常.从PerlDoc开始,它说如果$Net::Whois::Raw::CHECK_FAIL = 1;设置为1then那么它应该返回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);
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 6

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

my $domain_info;
while (1) {
    $domain_info = eval { whois($domainName) };
    last if defined($domain_info);
    sleep(10); 
}
Run Code Online (Sandbox Code Playgroud)