我试图在for循环中使用break语句,但由于我在Perl代码中也使用了严格的subs,因此我得到了一个错误:在./ www.example.com第154行使用“strict subs”时,不允许使用裸字“break”final.pl。有没有一个解决方法(除了禁用严格的subs)?我的代码格式如下:
for
break
for my $entry (@array){ if ($string eq "text"){ break; } }
txu3uszq1#
我找到了使用last而不是break
for my $entry (@array){ if ($string eq "text"){ last; } }
它也在“perlsyn(1)”中的循环控制下进行了描述(类UNIX上的man perlsyn)。
man perlsyn
llmtgqce2#
其他数据(如果您有更多问题):
FOO: { for my $i ( @listone ){ for my $j ( @listtwo ){ if ( cond( $i,$j ) ){ last FOO; # ---> # | } # | } # | } # | } # <-------------------------------
vwkv1x7d3#
last可以在这里工作:
last
如果你有嵌套循环,那么last将从最里面的循环退出。在这种情况下使用标签:
LBL_SCORE: { for my $entry1 (@array1) { for my $entry2 (@array2) { if ($entry1 eq $entry2) { # Or any condition last LBL_SCORE; } } } }
给定一个last语句会使编译器从两个循环中出来。同样的事情可以在任意数量的循环中完成,标签可以固定在任何地方。
ars1skjm4#
在一个大的迭代中,我喜欢使用中断。只需按Ctrl + C退出:
my $exitflag = 0; $SIG{INT} = sub { $exitflag=1 }; while(!$exitflag) { # Do your stuff }
bzzcjhmw5#
对于带有 * 隐式循环 * 的Perl一行程序(使用-n或-p命令行选项),请使用last或last LINE来中断迭代输入记录的循环。例如,这些简单的示例都打印输入的前两行:
-n
-p
last 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。
-e
$_
print
另见:
last docslast , next , redo , continue - an illustrated exampleperlrun:命令行开关文档
next
redo
continue
Perl单行程序中last的更多示例:
Break one liner command line script after first matchPrint the first N lines of a huge file
5条答案
按热度按时间txu3uszq1#
我找到了使用last而不是break
它也在“perlsyn(1)”中的循环控制下进行了描述(类UNIX上的
man perlsyn
)。llmtgqce2#
其他数据(如果您有更多问题):
vwkv1x7d3#
last
可以在这里工作:如果你有嵌套循环,那么
last
将从最里面的循环退出。在这种情况下使用标签:给定一个
last
语句会使编译器从两个循环中出来。同样的事情可以在任意数量的循环中完成,标签可以固定在任何地方。ars1skjm4#
在一个大的迭代中,我喜欢使用中断。只需按Ctrl + C退出:
bzzcjhmw5#
对于带有 * 隐式循环 * 的Perl一行程序(使用
-n
或-p
命令行选项),请使用last
或last LINE
来中断迭代输入记录的循环。例如,这些简单的示例都打印输入的前两行:所有打印:
perl一行程序使用以下命令行标志:
-e
:告诉Perl在行内查找代码,而不是在文件中。-n
:一次循环输入一行,默认情况下将其分配给$_
。-p
:与-n
相同,也在输入上的每次循环迭代后添加print
。另见:
last
docslast
,next
,redo
,continue
- an illustrated exampleperlrun:命令行开关文档
Perl单行程序中
last
的更多示例:Break one liner command line script after first match
Print the first N lines of a huge file