【问题标题】:How do I check for an empty scalar in Perl?如何在 Perl 中检查空标量?
【发布时间】:2011-08-06 13:47:32
【问题描述】:

如何在 perl 中检查空标量?如果我没有$list,我不想发送电子邮件。

我可以在 send_email 例程中检查空消息还是在外部执行此操作?

我有一个使用 Win32::OLE 的查询。

my $servSet = $wmiObj->ExecQuery("SELECT * FROM Win32_Service WHERE DisplayName LIKE 'ServiceNameHere%'", "WQL",  wbemFlagReturnImmediately | wbemFlagForwardOnly);

我在这里循环并建立一个列表$list

foreach my $serv (in $servSet) {
    next if $serv->{started}; 
    my $sname  = $serv->{name};
    my $sstate = $serv->{started};
    my $ssmode = $serv->{startmode};
    $list .= "Service: $sname  - $sstate - $ssmode\n";  
 }

我使用 $list 作为邮件正文发送:

sub send_email {
...
..
$smtp->datasend($list);
..
.                        
}

【问题讨论】:

    标签: perl


    【解决方案1】:

    在 Perl 中,undef""(以及 0"0")评估为“假”。所以你可以做一个布尔测试:

    send_email() if $list;
    

    【讨论】:

      【解决方案2】:

      我不喜欢胡闹变量中的实际内容。如果我想查看是否有任何东西是标量,我会检查它的长度:

       send_mail() if length $scalar;
      

      【讨论】:

      • 这是最佳选择。执行send_mail() if $scalar; 会混淆 0、''(空字符串)和 undef。如果有 0,也许你想发送一个 '0'。我们看到一个通常写得不好的习语:while( <> ) { chomp; next unless $_; # ... },但它会跳过那些在包含一些值时评估为 false 的行。 length 是一个更好的测试。如果标量中有“某物”,则计算结果为 true,如果标量包含 ''(空字符串,什么都没有)或 undef(未定义),则计算结果为 false。有时太聪明(即太简洁)会给我们带来麻烦。
      【解决方案3】:

      你试过了吗?

       if (!($list eq ""))
           send_email(...);
      

       if ($list ne "")
           send_email(...);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 2019-07-18
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多