我正在尝试break
在循环中使用语句for
,但由于我也在我的 Perl 代码中使用严格的 subs,所以我收到一条错误消息:
在 ./final.pl 第 154 行使用“strict subs”时不允许使用裸词“break”。
是否有解决方法(除了禁用严格的潜艇)?
我的代码格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
附加数据(如果您有更多问题):
FOO: {
for my $i ( @listone ){
for my $j ( @listtwo ){
if ( cond( $i,$j ) ){
last FOO; # --->
# |
} # |
} # |
} # |
} # <-------------------------------
只需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
语句将使编译器从两个循环中出来。在任意数量的循环中都可以这样做,并且标签可以固定在任何地方。
在大型迭代中,我喜欢使用中断。只需按Ctrl+C退出:
my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };
while(!$exitflag) {
# Do your stuff
}
对于带有隐式循环(使用-n
或-p
命令行选项)的 Perl 单行代码,使用last
orlast LINE
来跳出遍历输入记录的循环。例如,这些简单的示例都打印输入的前 2 行:
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
- perlrun示例
:命令行切换 docs
last
Perl 单行代码的更多示例: