如何在Perl中跳出循环?

wlsrxk51  于 2023-05-29  发布在  Perl
关注(0)|答案(5)|浏览(300)

我试图在for循环中使用break语句,但由于我在Perl代码中也使用了严格的subs,因此我得到了一个错误:
在./ www.example.com第154行使用“strict subs”时,不允许使用裸字“break”final.pl。
有没有一个解决方法(除了禁用严格的subs)?
我的代码格式如下:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
txu3uszq

txu3uszq1#

我找到了使用last而不是break

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}

它也在“perlsyn(1)”中的循环控制下进行了描述(类UNIX上的man perlsyn)。

llmtgqce

llmtgqce2#

其他数据(如果您有更多问题):

FOO: {
       for my $i ( @listone ){
          for my $j ( @listtwo ){
                 if ( cond( $i,$j ) ){

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # <-------------------------------
vwkv1x7d

vwkv1x7d3#

last可以在这里工作:

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}

如果你有嵌套循环,那么last将从最里面的循环退出。在这种情况下使用标签:

LBL_SCORE: {
    for my $entry1 (@array1) {
        for my $entry2 (@array2) {
            if ($entry1 eq $entry2) { # Or any condition
                last LBL_SCORE;
            }
        }
    }
 }

给定一个last语句会使编译器从两个循环中出来。同样的事情可以在任意数量的循环中完成,标签可以固定在任何地方。

ars1skjm

ars1skjm4#

在一个大的迭代中,我喜欢使用中断。只需按Ctrl + C退出:

my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };

while(!$exitflag) {
    # Do your stuff
}
bzzcjhmw

bzzcjhmw5#

对于带有 * 隐式循环 * 的Perl一行程序(使用-n-p命令行选项),请使用lastlast LINE来中断迭代输入记录的循环。例如,这些简单的示例都打印输入的前两行:

echo 1 2 3 4 | xargs -n1 | perl -ne 'last if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -ne 'last LINE if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last if $. == 3;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last LINE if $. == 3;'

所有打印:

1
2

perl一行程序使用以下命令行标志:
-e:告诉Perl在行内查找代码,而不是在文件中。
-n:一次循环输入一行,默认情况下将其分配给$_
-p:与-n相同,也在输入上的每次循环迭代后添加print

另见:

last docs
last , next , redo , continue - an illustrated example
perlrun:命令行开关文档

Perl单行程序中last的更多示例:

Break one liner command line script after first match
Print the first N lines of a huge file

相关问题