Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5286700
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2010-06-16 16:36:20

--CGI编程--Perl中的控制结构(二)-- 下一节
   
  一种编程语言中的控制结构是控制程序流程走向的语句和语法,今天先来学学最基本的三个控制If、Unless、Until,呵呵,其实跟其他编程语言中的对应语句的用法没有大的区别,我们就通过几个例子来看一看吧。
  if是各种语言中都有的结构,但是perl的if似乎有点……那个,可称之为“定语后置”。 具体来说就是这个样子的
   #!/usr/bin/perl -w
   use strict;
   {
   my $a=3;
   print "thank god!" if($a==3);
   }
  当然这是一个很无聊的程序了,但给大家演示了perl中定语是如何后置的。其他地方if的用法同其他语言就没什么区别了。又例如下面的例子
   #!/usr/bin/perl -w
   use strict;
   {
   my $a;
   for($a=0;$a<10;$a++)
     {
      if($a>5) print "haha\n";
     }
   }
  有了if就一定会有else,else也没有什么特别的。用法如下:
   #!/usr/bin/perl -w
   use strict;
   {
   my $a;
   for($a=0;$a<10;$a++)
     {
      if($a>5) print "haha\n";
      else print "lala\n";
     }
   }
  perl里面有一个特别的控制语句叫做“elsif”的,注意,不是“elseif”,而是“elsif”,这个语句的作用同else if是一样的。使用可以看下面的例子。
   #!/usr/bin/perl -w
   use strict;
   {
   my $a;
   for($a=0;$a<10;$a++)
     {
      if($a>5) print "haha\n";
      elsif($a>3) print "lala\n";
      else print "gee!\n";
     }
   }

  Unless是If的反义词,这个关键字的用法和if完全一样,但是相当于加上一个!(取非),用一个例子来说:
   #!/usr/bin/perl -w
   use strict;
   {
   my $a;
   for($a=0;$a<0;$a++)
     {
      print "$a\n" if(!$a>5);
     }
   }
  和
   #!/usr/bin/perl -w
   use strict;
   {
   my $a;
   for($a=0;$a<0;$a++)
     {
      print "$a\n" unless($a>5);
     }
   }
  是一样的。 我一直不太明白这个关键字有什么用。
  Until是While的反义词,就是说不执行后面的语句一直到满足条件为止。如下面的例子
   #!/usr/bin/perl -w
   use strict;
   {
   my $a;
   for($a=0;$a<0;$a++)
     {
      until($a==3)
       { print "$a\n" unless($a>5);
        $a++;
       }
     }
   }
  这一段程序打印出3,好像很无聊是吧?但是有时候会有用的。这里有一个需要注意的是在until 里面有一个$a++。没有这个就会……555,死循环了。
 
 今天继续剩余的程序流程控制,有next、last、redo这么几个语句。next相当于c语言中的continue,就是中止本次循环的过程,开始下一次循环。我们可以参照下面 的例子来理解它:
   #!/usr/bin/perl -w
   use strict;
   {
   my $x;
   for($x=0;$x<10;$x++)
     {
      if($x==3)
         { next;}
         print "$x ";
     }
   }
   会打印出0 1 2 4 5 6 7 8 9,当到了3的时候就next了,呵呵。next还可以和标号结合使用退出某一层循环。如下面的例子。
   #!/usr/bin/perl -w
   use strict;
   {
   my $x;
   my $y;
   here:       # here是一个标号
    for($x=0;$x<5;$x++)
     {
      for($y=1;$y<3;$y++)
        { if($x==3)
           { next here; }
           print "$x ";
        }
      print "\n";
     }
   }
  将会打印 0 0 1 1 2 2 4 4,到3的时候跳过标有here标号的循环。
  last相当于c语言中的break,就是跳出循环。例如下面的代码:
   #!/usr/bin/perl -w
   use strict;
   { my $x;
   for($x=0;$x<10;$x++)
      {
       last if($x==3);
       print "$x ";
      }
   }
  将会打印0 1 2。当$x增加到3的时候就退出了。last同next一样也具有标号的功能。例如下面的代码:
   #!/usr/bin/perl -w
   use strict;
   {
   my $x;
   my $y;
   there:
    for($x=0;$x<10;$x++)
      {
       for($y=0;$y<3;$y++)
         {
          last if($x==3);
          print("$x ");
         }
       print("\n");
      }
   }
  会打印出 0 0 0 1 1 1 2 2 2,这里当$x==3的条件满足时,就会跳出标有there的循环。
  redo是一个很好玩的东西,这个家伙居然会让当前的一圈循环重新进行一次。但是我到现在都没有发现这个东西有什么用。下面的例子说明了redo的用法。
   #!/usr/bin/perl -w
   use strict;
   {
   my $x;
   for($x=0;$x<5;)
     {
      $x++;
      redo if($x==4);
      print "$x ";
     }
   }
  会打印1 2 3 5,呵呵,这个结果是很有趣的啊。当$x==3的时候,$x++结果是4,然后发生了redo,结果4就没打印出来。然后下一次循环开始了。这个时候又发生了一次$x++; 结果$x变成5了,然后打印出来。然后条件检测不通过,退出循环。
  如果把上面的循环改成
   for($x=0;$x<5;$x++)
     {
      redo if($x==4);
      print "$x ";
     }
  则在我的机器上面发生了死循环,呵呵。 明天我们就开始使用cgi模块写cgi程序了,高兴啊,关于程序控制方面的东西以后会一步步补全的。
阅读(4093) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~