跳出控制结构: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