perl的循环控制
时间:2010-07-30 来源:bellsleep
perl的循环控制
2009-04-22 13:09
#!/usr/bin/perl #---------------------------------------控制结构----------------------------------------------- $part = 1; #运行各个部分 #perl的真假判别 #只有一下情况为假,其余为真 #"0" 零字符串 # "" 空字符串 # 0 数字零 # undef() 取值空 if($part == 1){ #条件语句--------------------------------------------------------------------------------------- #1、if语句 #形式: 1、if # 2、if else # 3、if elseif(一个或多个) else $in=<STDIN>; chomp($in); if($in>97){ print '$in>a'; }else{ print '$in<a'; } #2、 unless语句(功能同if相反,即是 else 的意思) #形式:1、unless # 2、unless else unless($x==1){ print " message!\n"; } #循环语句--------------------------------------------------------------------------- #1、while循环(条件为真时执行循环体) #2、until循环(条件为假时执行循环体) #如果条件一开始为假,则上面两种循环一次也不会执行! $x=10; until($x<=0){ print ' $x<=0'; $x--; } print "\n"; #3、do while/until 语句 #这两个循环体至少执行一次,do/while 是条件真执行循环体,do/until 是条件为假是执行! $x=-10; do{ print ' ',$x++; } until($x>=0); print "\n"; #4、for循环 和C和Java没什么区别 #格式: for( ; ; ){ } for($x=0,$x++; $x<=10; $x++,$x+=2){ print " $x"; } print "\n"; #5、foreach循环 #foreach接受一个 列表 变量(不一定是数组) ,并将其中的数据一一赋给某个给定的标量 #但要注意,循环结束后,某个给定的标量将回到初始值! @x=('Hello',' perl','! '); # @x 与 $x 完全不同,不一样的两变量! print "$x\n"; foreach $x (@x) { #等价 foreach (@x){ print $x; # print; } # } print "\n",$x,"\n"; # $x 的值为改变! #注意:foreach所用的列变量可以是任何值为列表的语句,不一定要数组变量,甚至还可以 #不写标量变量,让Perl使用默认的变量 " $_ "。在Perl中,许多运算都会以" $_ " 做为默认的变 #量,任何地方都可以用一般的变量取代" $_ "。 #注意:在foreach里面操作会改变 原列表 变量里面的值! #其它控制语句------------------------------------------------------------------------- #1、标记修饰符(标号) #在c语言中如果想—次跳过多个循环,一定要用到难缠的goto语句不可。在Perl中就 #比较简单了,只要为想去执行的代码块取个名宁,即标记(label),再配合其他控制语句如 # redo、next、last 就可以了。 #选定标记之后,只要把它放在需要的语句前而,并加上冒号即可! #2、修改循环控制结构的语句:redo nest last #◆last # last 语句会中断最内侧的循环,继续执行紧临区段后的语句。 last 语句可以带也可以不带 #标号修饰符! #使用不带标号修饰符的 last 语句时,退出当前语句块;使用常标号修饰符的 last 语句时, #退出与所带标号修饰符相关酌语句块。 #注意,退出的语句块也可能是在当前语句块以上的好几层。 # last 语句只会对循环代码块起作用,其他有文法结构的语句代码块并不能用 last 语句中断。 #总的来说,if/else 以及 do while/until 的代码块不能用Iast来中断,只有for、foreach、 #whle、until 以及“普通代码块”才可以。所谓普通代码块,是指不属于 if/else 、循环 #或函数的代码块。 #◆next # next 只是略过 循外 剩下来的语句,但不会中断循环。 # next 语句可以带也可以不带标号修饰符:使用不带标号修饰符的 next 语句时,退出本次 #执行的当前循环语句块,继续判断循环条件执行循环;使用带标号修饰符的 next 语句时,退出与 #所带标号修饰符相关联的循环,仍需要继续判断循环条件执行循环。 #◆redo #它可以跳到循环的最前面,但不会再执行一次控制语句。 # redo 语句也可以带或不带标号修饰符,不带标号时, redo 语句跳到所在语句块的第一条 #语句上;带标号时,跳到与所带标号相关联的语句块的第一条语句上。 # redo 是Perl的一个特有命令,其含义是重复此次循环,即循环变量不变,回到循环 #起始点,但要注意 redo 命令在do循环中不起作用。 while($x<14){ print "\$x=$x\n"; if( ($x++)==13){ redo; } } # $x 可以取到14 , $x 最后取到了 15 #◆goto 语句 LABEL1:{ print "LABEL1,reach! "; if($x++ ==15){ goto LABEL2; }else{ goto LABEL3; } } LABEL2:{ print "LABEL2,reach! "; goto LABEL1; } LABEL3:{ print "LABEL3,reach! "; if($x<18){ goto LABEL2; } print "last .\n"; } #3、表达式修饰符 # expression if condition; # expression while condition; # expression until condition; # expression unless condition; #以上语句都先看 condition 的真假,然后执行 expression #注意:expression 必须是简单表达式,不能是语句代码块。 print "yes! " if $x>8; #4、&& || # && 同if # || 同 unless print "message&&1 " && print "message &&2 "; print "message||1 " || print "message ||2\n"; #输出:yes! message &&2 1message||1 } |
相关阅读 更多 +