Как проверить наличие пустого скаляра в Perl? - PullRequest
4 голосов
/ 05 августа 2011

Как проверить наличие пустого скаляра в 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";  
 }

Я использую список $ для отправки в качестве основной части письма:

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

Ответы [ 3 ]

10 голосов
/ 06 августа 2011

В Perl undef, "" (а также 0 и "0") оцениваются как "ложные". Таким образом, вы можете просто сделать логический тест:

send_email() if $list;
8 голосов
/ 06 августа 2011

Я не люблю дурачиться с тем, что на самом деле в переменной. Если я хочу увидеть, находится ли что-нибудь, что-либо вообще в скаляре, я проверяю его длину:

 send_mail() if length $scalar;
0 голосов
/ 05 августа 2011

Вы пробовали это?

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

или

 if ($list ne "")
     send_email(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...