控制语句

-1-------------------------------------------------------------------------------------
1.unless控制语句:
  在if控制语句中,只有当条件表达式为真时,才执行某块代码。
  那unless是在条件为假时才会执行,与if相反。

  unless($fred =~/\A[A-Z]\w*\z/i)  #当条件不成立时执行下面语句
  {
     print "The value of \$fred doesn't look a Perl identifier name.\n"; 
  }

 2.unlesselse子句
  unless ($com =~/\AFeb/)
  {
      print "This is month has at least thirty days.\n"
  }else
  {
      print "Do you see what's going on here?\n";
  }

  3.until控制语句:
    如果你想颠倒wile循环的条件表达式,就使用until

    until($j < $i) #条件相反
    {
        $j *=2;
    }
    这个循环会一直执行,直条件为真。它只不过是改装过的while,两者之间的唯一区别在于,until
    在条件为假重复执行,

  3.elsif语句:
    if(con)
    {
        dosoming;
    }
    elsif(con)
    {
        dosoming;
    }
    elsif(con)
    {
        dosoming;
    }
    else
    {
        defualt;
    }

 4.自增与自减
 ++
 --
 ++/--操作符写在变量之前就能先增/减 变量的值,然后获取新值

 my $m = 5;
 my $n = $m++;  #先增加变量的值$m的值为6,然后把该值放入$n

 my $c = --$m;  #先减少$m的值到5,然后把该值放入$c

 my $d = $m++;  #$d得到的是$m之前的值5,然后$m的值增加到6
 my $e = $m--;  #$e得到的是$m之前的值6,然后$m的值减少到5

 如果操作符在前,先会增加或自减,然后使用新值;
 如果操作符在后,就会先返回其原来的值,然后在再自增或自减


 5.for结构

    for(初始化;测试;递增)
    {
        程序主体;
        程序主体;

    }
    对perl而言就一种变相的while循环
    初始化;
    while(测试)
    {
        程序主体;
        程序主体;
        递增;
    }

    for循环最常见的用途,就是控制重复的运算过程
    for(my $i=1;$i < 10;$++)
    {
        print "I Can see $i\n";
    }
    for(my $i=10;$i>=1;$i--)
    {
        print "I can see $i\n";
    }

   for无限循环
   for(;;)
   {
     print "Looping\n";
   }

  for and foreach是等价的

-1-------------------------------------------------------------------------------------

-2-------------------------------------------------------------------------------------
循环控制
  last操作符
    last操作符能立即中止循环的执行,和C的的break一样
    while(<>)
    {
        if(/last/)
        {
            last;
        }
        elsif(/fred/)
        {
            print ;
        }

  next操作符
     有时候你并不想立刻退出循环,但需要立刻结束当前这次迭代循环。这是就next的功能,
     它会跳到当前循环块的底端。在next之后,程序会继续执行循环的下一次迭代和C的continue
     一样的功能。
     $num;
     while(<>)
     {
        $num++;
        foreach(split)
        {
            $total++;
            next if /\W/;
            $valid++;
            $count{$_}++;
        }
        last if $num == 15;

    }
    print "Total things = $total,valid words = $valid\n";
    foreach $word(sort keys %count)
    {
        print "$word was seen $count{$word} times.\n";
    }

  redo操作符:
    redo它能控制返回当前循环块的顶端,而不经过任何测试条件,也不会进入下一次迭代循环。

    my @words=qw(fred barnye pebble dino wilma betty)
    my $errors;
    foreach (@words)
    {
         #redo here
         print "Type the word: '$_' ";
         chomp(my $try = <STDIN>);
         if($try ne $_)
         {
            print "Sorry - That's not right.\n\n";
            $errors++;
            print "error count: $errors\n";
            redo;
         }
    }
    next and redo 两者最大区别在于,next会正常进行下一次迭代,而redo则会重新执行这次迭代

    foreach(1..10)
    {
        print "Number $_.\n";
        print "Please choose: last,next,redo,or none of the above? ";
        chomp(my $choice=<STDIN>);
        print "\n";
        last if $choice =~/last/i;
        next if $choice =~/next/i;
        redo if $choice =~/redo/i;
        print "That wasn't any of the choice ...onward\n";
    }
    print "all,folks\n";

  带标签的块:
    当有你需要从内层对外层的循环控制时,请使用标签(label).

    LINE: while(<>)
          {
              foreach (split)
              {
                 last LINE if /END/i; 跳出标签为LINE的循环
                 ....;
              }
          }

   条件运算符:
     expression ? if_true_expr: if_false_expr
     如果为真,则执行冒号表达式前的表达式
     否则就执行冒号后的表达式。

     判断大小
     my $a=<>;
     my $b=<>;
     my $max = $a > $b?$a:$b

     嵌套分支:
     my $size = ($with < 10) ? "small":
                              ($with < 20)?"medium":
                              ($with < 50)?"large":
                                         "extr-large"; #default value

  逻辑操作符:
    逻辑AND(与) 操作符(&&)
    逻辑OR(或)  操作符(||)

    if( (9 <= $hour) && ($hour < 17))
    {
         prnt "OK\n";
    }

    if(($name eq "fred")||($name eq "barney"))
    {
         print "OK\n";
    }


  短路操作符:
    perl的短路操作符求得值不只是简单的布尔值,而是最后运算的那部分表达的值

    my $last_name = $last_name{$somenname} ||'(no last name)';


  定义或操作符:
    // #defined-or

    for my $try (0,undef,'0',1,25)
    {
        print "Tring [$try] ----> ";
        my $value = $try // 'default';
        say "\tgot [$value]";
    }
-2-------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值