unless
在if 控制结构中,只有条件为真时,才执行块中的代码。若是你想在条件为假时执行,可使用unless:除非条件为真,不然执行块中的代码
unless($fred =~ /^[A-Z_]\w*$/i){
print “The value of \$fred doesn’t look like a Perl identifier name.\n”;
}
unless 和else 语句一块儿使用
unless 中也能够有else 语句。虽然语法上支持,但可能引发混淆:
unless ($mon =~ /^Feb/){
print “This month has at least thirty days.\n”;
}else{
print “Do you see what’s going on here?\n”;
}
until 控制结构
有时,但愿将while 循环的条件部分取反。此时,可使用until:
until($j > $i){
$j *=2;
}
表达式修饰符
为了获得更紧凑的形式,表达式后能够紧接控制修饰语。如,if 修饰语能够像if 块那样使用:
print “$n is a negative number.\n”if $n<0;
还有一些其它的修饰语:
&error(“Invalid input”) unless &valid($input);
$i *= 2 unitl $i > $j;
print “”, ($n += 2) while $n <10;
&greet($_) foreach @person;
last 操做
last 会马上结束循环。(这同C 语言或其它语言中的“break”语句相似)。它从循环块中“紧急退出”。当执行到last,循环即结束,以下例:
#输出全部出现fred 的行,直到碰见_ _END_ _标记
while(<STDIN>){
if(/_ _ END_ _/){
#这个标记以后不会有其它输入了
last;
}elsif(/fred/){
print;
}
}
##last 跳转到这里##
Perl 的5 种循环体分别是for, foreach, while, until,以及“裸”块◆。花括号括起来的if 块,子程序◆不算。在上面的例子中,last 对整个循环块其做用。
next 操做
有时还不但愿结束循环,但本次循环已经结束。这种状况下,next 是很是适用的。它跳到当前循环块的最后面(块内)next 以后,又会进入下一轮循环(这和C 或者相似语言的“continue”类似,但不同):
css
#分析输入文件的单词
less
while(<>){
ide
foreach(split){ #将$_分拆成单词,并依次赋给$_
测试
$total++;
spa
next if/\W/; #不是“words”的被跳过k
code
Perl 语言入门(第四版)
input
blei@163.com 132 / 201 9/21/2006
it
$valid++;
入门
$count{$_}++; #对每一个单词进行计数
ast
##next 跳到这里##
}
}
print “total things = $total, valid words = $valid\n”;
foreach $word (sort keys %count){
print “$word was seen $count{$word} time.\n”;
}
#输入测试
my @words = qw{ fred barney pebbles dinoWilma betty };
my $errors = 0;
foreach(@words){
##redo 跳到这里##
print “Type the word ‘$_’: ”;
chomp(my $try =<STDIN>);
if($try ne $_){
print “sorry –That’s not right.\n\n”;
$errors++;
redo; #跳转到循环顶端
}
}
print “You’ve completed the test, with $errors errors.\n”;