当前位置:学海荡舟 -> 电脑乐园 -> Perl中的控制结构(三)



  编 程 入 门
--CGI编程--Perl中的控制结构(三)--

  今天继续剩余的程序流程控制,有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程序了,高兴啊,关于程序控制方面的东西以后会一步步补全的。

相关链接:   API实例解析