如何在Perl中检查空标量?

jda*_*mae 4 perl

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

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

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

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

我在这里循环并建立一个列表 $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";  
 }
Run Code Online (Sandbox Code Playgroud)

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

sub send_email {
...
..
$smtp->datasend($list);
..
.                        
}
Run Code Online (Sandbox Code Playgroud)

Eug*_*ash 10

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

send_email() if $list;
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 8

我不喜欢愚弄变量中的实际内容.如果我想查看是否有任何东西,任何东西都在标量中,我会查看它的长度:

 send_mail() if length $scalar;
Run Code Online (Sandbox Code Playgroud)

  • 这是最佳的.如果$ scalar执行`send_mail();'混淆0',''(空字符串)和undef.如果有一个0,也许你会想要发一个'0'.我们看到一个写得很差的习语:`while(<>){chomp; 接下来除非$ _; #...}`但是在包含某些值时跳过评估为false的行.`length`是一个更好的测试.如果标量中存在"某事",则计算结果为true;如果标量包含''(空字符串,什么都不是)或undef(未定义),则计算结果为false.有时过于聪明(即过于简洁)会让我们陷入困境. (2认同)