помогите с циклом perl foreach - PullRequest
0 голосов
/ 04 августа 2011

Мне нужна помощь, чтобы выяснить, куда мне звонить send_mail (). Там, где я сейчас размещаю его в коде, он отправляет электронное письмо для каждого условия, и каждое отправляемое им электронное письмо добавляет еще одну запись как часть набора. Я заинтересован только в отправке одного письма с собранными записями, последнего показанного сообщения (msg4). Могу ли я сделать это в том же цикле? Я не уверен.

Пример: (Msg1)

Service: MST Engine  - Stopped - Manual

(msg2):

Service: MST Engine  - Stopped - Manual
Service: MST Logging   - Stopped - Manual

(msg3):

Service: MST Engine  - Stopped - Manual
Service: MST Logging   - Stopped - Manual
Service: MST Server  - Stopped - Manual

(msg4): (добавлено только в это письмо)

Service: MST Engine  - Stopped - Manual
Service: MST Logging   - Stopped - Manual
Service: MST Server  - Stopped - Manual
Service: MST Formatter  - Stopped - Manual

Вот основная часть, где я устанавливаю условия: (Я использую пакет Win32 :: OLE имеет метод в (COLLECTION). Так что это не ссылка на массив.)

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

1 Ответ

2 голосов
/ 04 августа 2011

Переместите вызов send_email из цикла, или он будет вызывать его каждый раз, когда проходит цикл.Я предполагаю, что функция просто отправляет содержимое $ winsvcs.

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

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