--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程序了,高兴啊,关于程序控制方面的东西以后会一步步补全的。
阅读(4157) | 评论(0) | 转发(0) |