2013-07-18 1 views
1

Я ищу некоторую помощь по скрипту, который может проходить через строки массива, печатать их на экране и останавливать, когда скрипт обнаруживает определенный символ, в в этом случае отметка !. Я попытался с помощью foreach заявления, но не получаю никакого успеха ...Получение строк из массива и остановка на определенном символе

Примера массива (@lines) содержания является:

ip vrf test 
rd 2856:10000331 
export map SetAltMgmtRT 
route-target export 2856:10000331 
route-target import 2856:10000331 
maximum routes 1000 75 
! 

Сценария у меня до сих пор:

elsif ($action eq "show_vrf") { 
      my $cmd = "show run | begin <VRF_NAME>"; 
      $cmd = $cmd . " | i $include" if($include) ; 
      my @lines = $s->cmd(String => $cmd, 
          Prompt => "/$enableprompt/", 
          Timeout => 10); 
      foreach $lines (@lines) { 
        <statement, this is where I am stuck> 
      } 
      print $lines; 

Любая помощь будет оценена :)

+0

Вы должны узнать о 'next' и 'last'. – Ingo

ответ

4

Каковы критерии остановки? Любой восклицательный знак или только один на своей собственной линии? Или просто строка, начинающаяся с восклицательного знака?

У вас также есть несколько вещей под названием lines, которые вам нужно разобраться.

my $output; 
foreach my $line (@lines) { 
    last if $line =~ m/^!/; # leave loop if line starts with an exclamation mark 
    $output .= $line; 
} 
print $output; 

Для ваших дополнительных требований в свой комментарий ниже (данные более одного восклицательного знака) вам нужно что-то вроде этого:

+0

Просто восклицательный знак в конце на своей собственной линии - это то, что я после ... – user2572835

2

перерыв, если линии совпадают!

last if ($line =~ /!/); 
1
for(@lines){ 
last if(/\!$/);# this will be true if there is an Exclamation mark at the end of line 
print $_ 
} 
+0

Спасибо, ребята за помощь, это было последнее, если заявление, которое застало меня поймать ... оцените быстрые ответы и, конечно же, помощь. – user2572835

+0

Вышеприведенный способ, позволяющий мне захватить первый экземпляр массива в соответствии с приведенным выше примером, но есть способ, которым я могу снова искать один и тот же экземпляр внутри одного и того же массива, используя тот же метод, описанный выше, с остановкой на ' !» отметка? Информация, которую я хочу вытащить, появляется 3 раза по всему массиву. Благодарю. – user2572835

+0

@ user2572835 - Я обновлю свое сообщение, чтобы сделать это – plusplus

Смежные вопросы