加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl中单行条件 unless until if while的用法

发布时间:2020-12-15 20:59:54 所属栏目:大数据 来源:网络整理
导读:unless 在if 控制结构中,只有条件为真时,才执行块中的代码。如果你想在条件为假时执行,可以使用unless:除非条件为真,否则执行块中的代码 unless($fred =~ /^[A-Z_]w*$/i){ print “The value of $fred doesn’t look like a Perl identifier name.n

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”相似,但不一样):

  1. #分析输入文件的单词
  2. while(<>){
  3. foreach(split){ #将$_分拆成单词,并依次赋给$_
  4. $total++;
  5. next if/W/; #不是“words”的被跳过k
  6. Perl 语言入门(第四版)
  7. blei@163.com 132 / 201 9/21/2006
  8. $valid++;
  9. $count{$_}++; #对每个单词进行计数
  10. ##next 跳到这里##
  11. }
  12. }
  13. print “total things = $total, valid words = $validn”;
  14. foreach $word (sort keys %count){
  15. print “$word was seen $count{$word} time.n”;
  16. }
redo 操作
循环控制的第三个操作是redo。它会调到当前循环块的顶端,不进行条件表达式判断以及接着本次循环.
  1. #输入测试
  2. my @words = qw{ fred barney pebbles dinoWilma betty };
  3. my $errors = 0;
  4. foreach(@words){
  5. ##redo 跳到这里##
  6. print “Type the word ‘$_’:;
  7. chomp(my $try = <STDIN>);
  8. if($try ne $_){
  9. print “sorry –That’s not right.nn”;
  10. $errors++;
  11. redo; #跳转到循环顶端
  12. }
  13. }
  14. print “You’ve completed the test, with $errors errors.n”;
next 和redo 的最大区别在于,next 会进入下一次循环,而redo 会继续执行本次循环

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读