首页 | IT新闻 | 硬件 | 操作系统 | 开发 | 网络编程 | 数据库 | 热门框架 | 网络安全 | 组网 | 建站指南 | 网页制作 | 特效 | 实用技巧 | 服务器 | 办公 | QQ | 探索 | 社区

  • 技术部落
  • 部落首页 > 网络编程 > CGI > 正文
  • CGI编程--Perl中的控制结构(三)
      2007-2-25  来源:网络资源  编辑:Jsbulo  热度:

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