Кажется, что есть опечатка, так как $network
является переменной;Вы можете иметь в виду /^network$/
.
Наличие в вашей программе use strict;
предупредило бы вас о непреднамеренной (так необъявленной) переменной.Наличие use warnings;
предупредило бы вас об использовании неинициализированной переменной при компиляции регулярного выражения.
В цикле вы устанавливаете переменную $PRINT_TP
(в 1) только в том случае, если есть какие-либо элементы, которые соответствуют.Тогда List :: Util имеет функцию только для этого
my $PRINT_IP = any { $_ eq 'network' } split ' ', $cmd_list;
или
my $PRINT_IP = any { /^network\z/ } split ' ', $cmd_list;
, если вам нужно регулярное выражение для более сложных условий.
Это возвращает 1
при первом совпадении, результат, который создает ваш цикл for
.Если вам действительно нужен счет, тогда действительно используйте grep
.Когда совпадения нет, $PRINT_IP
устанавливается на ''
, пустая строка.
Библиотека более эффективна, во-первых, так как она прекращает обработку, когда совпадение происходит.Вы также можете сделать это, добавив last
в ваше условие if
, но процедуры List::Util
обычно более эффективны.
Более важно: пожалуйста, всегда указывайте use warnings;
и use strict;
в начале.