Chinaunix首页 | 论坛 | 博客
  • 博客访问: 813163
  • 博文数量: 296
  • 博客积分: 5376
  • 博客等级: 大校
  • 技术积分: 2298
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-14 19:02
文章分类

全部博文(296)

文章存档

2023年(2)

2020年(2)

2018年(2)

2017年(26)

2016年(4)

2015年(19)

2014年(12)

2013年(26)

2012年(84)

2011年(50)

2010年(41)

2009年(28)

分类:

2010-07-30 09:00:32

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=;
    chomp($in);
    if($in>97){
        print '$in>a';
    }else{
        print '$in    }
   
    #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

}
阅读(4482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~