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

How to test for undef when running whois in Perl?

在下面的代码示例中,我试图获取 whois 声明。它时不时地抛出超时异常。从 PerlDoc 它说如果 $Net::Whois::Raw::CHECK_FAIL = 1; 设置为 1 那么它应该 return 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);
        };
    }
}

替换

 if (undef == $domain_info) { 

if (not defined $domain_info) { 

检查变量是否不是defined

==用于比较两个数字。

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

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