2011-08-05 27 views
4

如何檢查perl中的空標量?如果我沒有$list,我不想發送電子郵件。如何檢查Perl中的空標量?

我可以檢查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"; 
} 

我使用$列表發送的電子郵件的正文:

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

回答

10

在Perl中,undef""(以及0"0")評估爲 「假」。所以你可以做一個布爾測試:

send_email() if $list; 
+0

完美。效果很好。謝謝! – jdamae

0

你有沒有試過這種?

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

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

我不喜歡與變量中的實際內容混在一起。如果我想查看是否有任何東西在標量中,我檢查它的長度:

send_mail() if length $scalar; 
+2

這是最佳選擇。做'send_mail()if $ scalar;'confuses 0,''(空字符串)和undef。如果有0,也許你會發送'0'。我們看到一個通常寫得不好的習慣用法:while(<>){chomp;除非$ _; #...}'但是它會跳過包含某些值時計算結果爲false的行。 「長度」是一個更好的測試。如果標量中存在「某些」,則評估爲true;如果標量包含「'(空字符串,不爲空)或undef(未定義),則評估爲false。有時太聰明(即太簡單)會讓我們陷入困境。 – DavidO