跳出控制结构:next和last
next 和last 操作符运维你在循环中改变程序执行的方向,你可能经常会遇到一些的特殊情况,
碰到这种情况时你希望跳过它,或者像退出循环。
比如当你处理Unix 账号时,你也许希望跳过系统账号(比如root或Ip),
next 操作符允许你将跳至本地循环的结束,
开始下一个循环。
而last 操作符允许你跳至整个循环的结束,如果循环条件表达式为假时发生的情况一样。
next 跳过本地循环,回到循环顶端:
Vsftp:/data01/mysqllog/binlog# cat a3.pl
my @users=qw/root a1 a2 a3 b1 b2 b3 lp c1 c2 c3/;
foreach $user (@users){
if ($user eq "root" or $user eq "lp") {next;};
print "\$user is $user\n";
}
Vsftp:/data01/mysqllog/binlog# perl a3.pl
$user is a1
$user is a2
$user is a3
$user is b1
$user is b2
$user is b3
$user is c1
$user is c2
$user is c3
last 退出循环:
Vsftp:/data01/mysqllog/binlog# cat a3.pl
my @users=qw/ a1 a2 a3 b1 root b2 b3 lp c1 c2 c3/;
foreach $user (@users){
if ($user eq "root" or $user eq "lp") {last;};
print "\$user is $user\n";
}
Vsftp:/data01/mysqllog/binlog# perl a3.pl
$user is a1
$user is a2
$user is a3
$user is b1
例子:next 跳过本次循环
Vsftp:/data01/mysqllog/binlog# cat t2.pl
my $str='AAWHEREBBCC';
if ($str =~ s/WHERE/SET/)
{print "\$str---1 is $str\n"}
elsif ($str=~ s/SET/SCAN/)
{print "\$str---2 is $str\n";};
Vsftp:/data01/mysqllog/binlog# perl t2.pl
$str---1 is AASETBBCC