标签不能持续使用,即前面的标签断裂?
Label cannot be used to last i.e. break for label in the front?
为什么 perl 无法持久,即 break for label in the front ahead?
正确的语法应该如何?
my $f;my $err=9;
my @l=(7,8,9,10);
for (@l) {
last T if $_==$err
}
$f=@l;
print "\ncomplete";
T:
print "\ncontain error";
Label not found for "last T" at ./non.pl line 17
要使用 last T
,您需要处于标签为 T
的循环内。
做你想做的事,正确的语法是
goto T if $_==$err
return
退出作用域直到找到子调用,
die
退出作用域,直到找到 eval
,并且
last
、next
和 redo
退出范围,直到找到循环。
要向前跳转,请使用 goto
。
goto T if $_ == $err;
但这不是更清楚吗:
my @l = ( 7, 8, 9, 10 );
my $err = 9;
my $f;
if ( grep { $_ == $err } @l ) { # Or `first` from List::Util
say "contain error";
$f = undef;
} else {
say "complete";
$f = @l;
}
如果您打算多次检查同一个 @l
,这样会更好:
my @l = ( 7, 8, 9, 10 );
my %l = map { $_ => 1 } @l;
my $err = 9;
my $f;
if ( $l{ $err } ) {
say "contain error";
$f = undef;
} else {
say "complete";
$f = @l;
}
为什么 perl 无法持久,即 break for label in the front ahead? 正确的语法应该如何?
my $f;my $err=9;
my @l=(7,8,9,10);
for (@l) {
last T if $_==$err
}
$f=@l;
print "\ncomplete";
T:
print "\ncontain error";
Label not found for "last T" at ./non.pl line 17
要使用 last T
,您需要处于标签为 T
的循环内。
做你想做的事,正确的语法是
goto T if $_==$err
return
退出作用域直到找到子调用,die
退出作用域,直到找到eval
,并且last
、next
和redo
退出范围,直到找到循环。
要向前跳转,请使用 goto
。
goto T if $_ == $err;
但这不是更清楚吗:
my @l = ( 7, 8, 9, 10 );
my $err = 9;
my $f;
if ( grep { $_ == $err } @l ) { # Or `first` from List::Util
say "contain error";
$f = undef;
} else {
say "complete";
$f = @l;
}
如果您打算多次检查同一个 @l
,这样会更好:
my @l = ( 7, 8, 9, 10 );
my %l = map { $_ => 1 } @l;
my $err = 9;
my $f;
if ( $l{ $err } ) {
say "contain error";
$f = undef;
} else {
say "complete";
$f = @l;
}