Вы можете иметь дело с условием в запросе SQL (возвращать только соответствующие строки - красные).Это, вероятно, лучший способ справиться с этим;он ограничивает данные, передаваемые между СУБД и клиентом (которые могут не иметь большого значения на одном компьютере или в соединении по локальной сети, но действительно имеют значение при соединении по глобальной сети).проверить в цикле for
, чтобы добавить соответствующую информацию в $winsvcs
только в том случае, если $sstate
равно 0 (эквивалентно красному).
foreach my $serv (in $servSet)
{
next if $serv->{started};
my $sname = $serv->{name};
my $sstate = $serv->{started};
my $ssmode = $serv->{startmode};
$winsvcs .= "Service: $sname - $servstat[$sstate] - $ssmode\n";
}
Обратите внимание, что оператор .
необходимо (особенно если вам нужно встроить результат вызова функции), но на самом деле не было необходимости в коде, который вы показали.Можно даже обойтись без 3-х переменных цикла, но тогда строка станет довольно длинной.
$winsvcs .= "Service: $serv->{name} - $servstat[$serv->{started}] - $serv->{startmode}\n";
Оба метода будут работать.Я рекомендую модифицировать SQL, а не цикл, но выбор за вами.