為什么 perl 不能持續,即打破前面的標簽?正確的語法應該如何?
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
uj5u.com熱心網友回復:
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;
}
uj5u.com熱心網友回復:
要使用last T,您需要在帶有標簽的回圈內T。
做你想做的事情,正確的語法是
goto T if $_==$err
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/396679.html
