Perl 从数组中获取行并在特定字符处停止

Perl 从数组中获取行并在特定字符处停止,perl,Perl,我正在寻找一个脚本的帮助,该脚本可以遍历数组的行,将它们打印到屏幕上,并在脚本检测到特定字符时停止,在本例中为标记。我尝试过使用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 !

我正在寻找一个脚本的帮助,该脚本可以遍历数组的行,将它们打印到屏幕上,并在脚本检测到特定字符时停止,在本例中为
标记。我尝试过使用
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;
elsif($action eq“show\u vrf”){
my$cmd=“show run | begin”;
$cmd=$cmd.“i$include”如果($include);
我的@lines=$s->cmd(字符串=>$cmd,
Prompt=>“/$enableprompt/”,
超时=>10);
foreach$行(@行){
}
打印$行;

任何帮助都将不胜感激:)

如果行匹配,请中断

last if ($line =~ /!/);

如果行匹配,请中断

last if ($line =~ /!/);

停止的标准是什么?任何感叹号,或者只有一个在它自己的行上?或者只有一行以感叹号开头

您还需要整理一些称为
行的东西

my $output;
foreach my $line (@lines) {
    last if $line =~ m/^!/; # leave loop if line starts with an exclamation mark
    $output .= $line;
}
print $output;
对于您在下面的评论中的附加要求(数据有多个感叹号),您需要以下内容:

use Data::Dumper;
my @output; # assign output chunks into an array
my $i = 0;
foreach my $line (@lines) {
    if ($line =~ m/^!/) {
        $i++;
        next;
    }
    $output[$i] .= $line;
}
print Dumper(\@output);

停止的标准是什么?任何感叹号,或者只有一个在它自己的行上?或者只有一行以感叹号开头

您还需要整理一些称为
行的东西

my $output;
foreach my $line (@lines) {
    last if $line =~ m/^!/; # leave loop if line starts with an exclamation mark
    $output .= $line;
}
print $output;
对于您在下面的评论中的附加要求(数据有多个感叹号),您需要以下内容:

use Data::Dumper;
my @output; # assign output chunks into an array
my $i = 0;
foreach my $line (@lines) {
    if ($line =~ m/^!/) {
        $i++;
        next;
    }
    $output[$i] .= $line;
}
print Dumper(\@output);

您需要了解
next
last
。您需要了解
next
last
。感谢大家的帮助,这是最后一条if语句让我抓到了…感谢您的快速回复,当然还有帮助。上述操作非常有效,使我能够根据示例捕获数组中的第一个实例但是有没有一种方法可以让我在同一个数组中再次搜索同一个实例,使用上面介绍的相同方法,在“!”标记处停止搜索?我希望提取的信息在整个数组中出现了3次。谢谢。感谢大家的帮助,这是我最后一次发现if语句…感谢您的快速回复和当然是帮助。上面的操作很好,允许我按照上面的示例捕获数组中的第一个实例,但是有没有方法可以使用上面概述的相同方法在相同的数组中再次搜索相同的实例,并停止在“!”标记处?我希望提取的信息在整个数组中显示3次。谢谢。