分类: IT业界
2011-07-09 15:37:32
选择性控制结构包括if和unless语句,类似于C语言中的if。
首先介绍一下真和假的定义。在Perl中,这些规则有些难以理解。控制表达式的值为空串或0时,则表达式为假, 对于其它任何情况,表达式的值都为真。
注意:"00"不是空串或0,值为真。"0.0"也是如此。
指令: if 假如
语法一:
if(判别运算式)
{
表达式为真时的语句块;
}
上个语法在Perl中也可以写成:
表达式为真时的语句块 if (判别运算式);
范例:
print"请输入您的分数?\n";
$scorre=
chop($score); #将$score最后一个换行字符\n删除掉
if($score>=60){
print"您的分数及格了!\n";
}
也可以写成: print "您的分数及格了!\n" if ($score>=60);
语法二:
if(判别运算式一){
判别式一为真时的语句块;
}else{
判别式一为假时的语句块;
}
范例:
print"请输入您的分数?\n";
$scorre=
chop($score);
if($score>=60)
{
print"您的分数及格了!\n";
}else{
print"您的分数不及格!\n";
}
语法三:
if (判别运算式一)
{
判别式一为真时的语句块;
}elsif(判别运算式二){
判别式二为真时的语句块;
}elsif(判别运算式三){
判别式三为真时的语句块;
}else{
所有判别式为假时的语句块;
}
范例:
print"请输入您的分数?\n";
$scorre=
chop($score);
if($score>60)
{
print"您的分数大于60分!\n";
}elsif ($score<60){
print"您的分数小于60分!\n":
}else{
print"您的分数刚好是60分!\n";
}
指令: unless 假如非
unless的含义就是说“如果判别式不为真,就执行...”。
语法一:
unless(判别运算式) {
判别式为假时语句块;
}
上个语法在Perl中也可以写成:判别式为假时语句块 unless (判别运算式);
范例:
print"请输入您的分数?\n";
$scorre=
chop($score); #将$score最后一个换行字符\n删除掉
unless($score<60)
{
print"您的分数及格了!\n";
}
也可以写成: print"您的分数及格了!\n"unless($score<60);
语法二:
unless(判别运算式)
{
判别式为假时语句块;
}else{
判别式为真时语句块;
}
范例:
print"请输入您的分数?\n";
$scorre=
chop($score);
unless($score<60)
{
print"您的分数及格了!\n";
}else{
print"您的分数不及格!\n";
}
进阶技巧:&&,||及?:作为控制结构
它们看上去像标点符号,或是表达式的一部分。但在Perl中可作为控制结构。
比如说:
if (判别表达式)
{为真时语句块};
也可以写为:
为真时的语句块 if (判别表达式)
但更简单的方式是:
判别式 && 为真时的语句块
为什么呢?&&为逻辑与操作符,其含义为:
若判别式为真,则表达式的值依赖于后面语句块的值。所以为真时的语句块被执行(用来求值)。
若判别式为假,则整个表达式为假,不用考虑后面语句块的值。所以为假时的语句块不被执行。
同样道理,unless(this){that}可替换为this||that。
?:表达式举例:exp1?exp2:exp3表示:如果exp1为真则求exp2的值,否则求exp3的值。
任何一种语言没有循环就是不完整的。Perl也是如此,它可以用while, do...while, for, until, foreach来实现。
循环中还可以用last,next,redo等操作符进行控制。
指令:
while 当..
语法:
while(判别运算式) {
程序叙述区块;
}
上个语法在Perl中也可以写成: 程序叙述区块while(判别运算式);
范例一:
while($<=10)
{
$sum+=$i;
$i++;
}
print"$sum\n"; #此时$sum =55;
范例二:
$filename="/path/cgi.txt";
open(FILE,"$filename")||die "Cannot open $filename\n";
#可以把
while($line=
{
print "$line";
}
close(FILE);
就会把cgi.txt这个文件的内容显示出来。
而这个范例可以把它改写成:
$filename="/path/cgi.txt";
open(FILE,"$filename")||die "Cannot open $ filename\n";
print "$line"while($line=);
close (FILE);
在这个范例中是把$filename文件内的数据一行一行的指派给$line这个纯量变量,再把$line显示出来.如果没有将
open(FILE,"$filename")Ⅱdie"Cannot open $ filename\n";
while(
{
print;
}
close(FILE);
指令:
do while 当..
语法:
do
{
程序叙述区块;
}while(判别运算式);
在while和do while循环中最大的不同是在do while循环中,程序叙述区块至少会被执行一次。
范例:
do{
$sum+=$i;
$i++;
}while($i<=10);
print "$sum\n"; #此时$sum=55;
指令:
until 直到...才
语法: until(判别运算式)
{
程序叙述区块;
}
上个语法在Perl中也可以写成: 程序叙述区块 until (判别运算式);
范例:
until($i>10){
$sum+=$i;
$i++;
}
print "$sum\n"; #此时$Sum=55;
指令:
do while 直到...才
语法:
do{
程序叙述区块;
}until (判别运算式);
范例:
do{
$sum+=$i;
$i++;
}until($i>10);
print "$sum\n"; #此时$sum=55;
指令:
for 循环陈述
语法一:
for (初始化运算式;判别运算式;循环过程运算式)
{
程序叙述区块;
}
范例一:
$sum=0;
for($i=1;$i<=10;$i++)
{
$sum+=$i;
}
print "$sum\n"; #此时$sum=55;
范例二:
@array=(3,6,9);
$number=@array; #把数组@array的元素个数指派给$number
#此时$number=3;
for($i=0;$inumber;$i++)
{
$sum+=$array[$i]; #把数组@array元素的值全部加起来
}
print"$sum\n"; #此时$sum=18;
语法二:
for $ variable(@array)
{
程序叙述区块;
}
在Perl语言中的for循环陈述还可以使用这个语法,各循环陈述foreach的用法一样.如果把$variable变量省略的话,就会将数组@array的元素一个一个指定给$_这个变量,这是比较精简的写法.
范例:
@array=(3,6,9);
for $int(@array)
{
$sum+=$int;
}
print"$sum\n"; #此时$sum=18;
也可以写成:
@array=(3,6,9);
for (@array)
{
$sum+=$_;
}
print"$sum\n"; #此时$sum=18;
指令:
foreach 循环陈述
语法:
foreach $ variable(@array)
{
程序叙述区块;
}
如果把$variable变量省略的话,就会将数组@array的元素一一指定给$_这个内定的输出变量.
范例一:
@array=(3,6,9);
foreach $int(@array)
{
$sum+=$int;
}
print "$sum\n"; #此时$sum=18;
也可以定成:
@array=(3,6,9);
foreach(@array)
{
$sum+=$_;
}
print "$sum\n"; #此时$sum=18;
范例二:
%FORM=("name","NCTU","value","TEM");
foreach $pair(sort keys%FORM)
{
print "$pair is $FORM{pair}\n";
}
这个范例在CGI语言写作中常常会用到.先用keys喧个函数来求出关联数组中全部的key,再用sort这个函数把全部的key由小到大排序,最后再把关联数组中的key和所对应的值(value)一一显示出来.而以上这个程序也可写成:
%FORM=("name","NCTU","value","TEM");
@array=(sort keys%FORM);
foreach $pair(@array)
{
print "$pair is $FORM{pair}\n";
}
指令:
last 退出循环陈述
语法:
last
范例:
for($i=1;$i<=10;$i++)
{
last if ($i==5); #如果$i等于5的话就退出for循环
print"$i\n";
}
会把1到4之间的数值显示出来.
指令:next 到循环的下一个陈述
语法:next
范例:
for($i<=10;$i++)
{
#如果是2的倍数的话,就到循环的下一个陈述
next if (($i%2)==0)
print"$i是一个奇数!\n";
}
会把1以10之间的奇数显示出来。
偶数
#!/usr/bin/perl -w
for ($i=0;$i<10;$i++) {
next if (!($i%2)==0);
print "$i is a jishu!\n";
}