perl学习之--------------------控制结构
标签:
#!/usr/bin/perl
#---------------------------------------控制结构-----------------------------------------------
$part = 1; #运行各个部分
#perl的真假判别
#只有一下情况为假,其余为真
#"0" 零字符串
# "" 空字符串
# 0 数字零
# undef() 取值空
if($part == 1){
#条件语句---------------------------------------------------------------------------------------
#1、if语句
#形式: 1、if
# 2、if else
# 3、if elseif(一个或多个) else
$in=<STDIN>;
chomp($in);
if($in>97){
print '$in>a';
}else{
print '$in<a';
}
#2、 unless语句(功能同if相反,即是 else 的意思)
#形式:1、unless
# 2、unless else
unless($x==1){
print " message!/n";
}
#循环语句---------------------------------------------------------------------------
#1、while循环(条件为真时执行循环体)
#2、until循环(条件为假时执行循环体)
#如果条件一开始为假,则上面两种循环一次也不会执行!
$x=10;
until($x<=0){
print ' $x<=0';
$x--;
}
print "/n";
#3、do while/until 语句
#这两个循环体至少执行一次,do/while 是条件真执行循环体,do/until 是条件为假是执行!
$x=-10;
do{
print ' ',$x++;
}
until($x>=0);
print "/n";
#4、for循环 和C和Java没什么区别
#格式: for( ; ; ){ }
for($x=0,$x++; $x<=10; $x++,$x+=2){
print " $x";
}
print "/n";
#5、foreach循环
#foreach接受一个 列表 变量(不一定是数组) ,并将其中的数据一一赋给某个给定的标量
#但要注意,循环结束后,某个给定的标量将回到初始值!
@x=('Hello',' perl','! '); # @x 与 $x 完全不同,不一样的两变量!
print "$x/n";
foreach $x (@x) { #等价 foreach (@x){
print $x; # print;
} # }
print "/n",$x,"/n"; # $x 的值为改变!
#注意:foreach所用的列变量可以是任何值为列表的语句,不一定要数组变量,甚至还可以
#不写标量变量,让Perl使用默认的变量 " $_ "。在Perl中,许多运算都会以" $_ " 做为默认的变
#量,任何地方都可以用一般的变量取代" $_ "。
#注意:在foreach里面操作会改变 原列表 变量里面的值!
#其它控制语句-------------------------------------------------------------------------
#1、标记修饰符(标号)
#在c语言中如果想—次跳过多个循环,一定要用到难缠的goto语句不可。在Perl中就
#比较简单了,只要为想去执行的代码块取个名宁,即标记(label),再配合其他控制语句如
# redo、next、last 就可以了。
#选定标记之后,只要把它放在需要的语句前而,并加上冒号即可!
#2、修改循环控制结构的语句:redo nest last
#◆last
# last 语句会中断最内侧的循环,继续执行紧临区段后的语句。 last 语句可以带也可以不带
#标号修饰符!
#使用不带标号修饰符的 last 语句时,退出当前语句块;使用常标号修饰符的 last 语句时,
#退出与所带标号修饰符相关酌语句块。
#注意,退出的语句块也可能是在当前语句块以上的好几层。
# last 语句只会对循环代码块起作用,其他有文法结构的语句代码块并不能用 last 语句中断。
#总的来说,if/else 以及 do while/until 的代码块不能用Iast来中断,只有for、foreach、
#whle、until 以及“普通代码块”才可以。所谓普通代码块,是指不属于 if/else 、循环
#或函数的代码块。
#◆next
# next 只是略过 循外 剩下来的语句,但不会中断循环。
# next 语句可以带也可以不带标号修饰符:使用不带标号修饰符的 next 语句时,退出本次
#执行的当前循环语句块,继续判断循环条件执行循环;使用带标号修饰符的 next 语句时,退出与
#所带标号修饰符相关联的循环,仍需要继续判断循环条件执行循环。
#◆redo
#它可以跳到循环的最前面,但不会再执行一次控制语句。
# redo 语句也可以带或不带标号修饰符,不带标号时, redo 语句跳到所在语句块的第一条
#语句上;带标号时,跳到与所带标号相关联的语句块的第一条语句上。
# redo 是Perl的一个特有命令,其含义是重复此次循环,即循环变量不变,回到循环
#起始点,但要注意 redo 命令在do循环中不起作用。
while($x<14){
print "/$x=$x/n";
if( ($x++)==13){
redo;
}
} # $x 可以取到14 , $x 最后取到了 15
#◆goto 语句
LABEL1:{
print "LABEL1,reach! ";
if($x++ ==15){
goto LABEL2;
}else{
goto LABEL3;
}
}
LABEL2:{
print "LABEL2,reach! ";
goto LABEL1;
}
LABEL3:{
print "LABEL3,reach! ";
if($x<18){
goto LABEL2;
}
print "last ./n";
}
#3、表达式修饰符
# expression if condition;
# expression while condition;
# expression until condition;
# expression unless condition;
#以上语句都先看 condition 的真假,然后执行 expression
#注意:expression 必须是简单表达式,不能是语句代码块。
print "yes! " if $x>8;
#4、&& ||
# && 同if
# || 同 unless
print "message&&1 " && print "message &&2 ";
print "message||1 " || print "message ||2/n"; #输出:yes! message &&2 1message||1
}
#---------------------------------------控制结构-----------------------------------------------
$part = 1; #运行各个部分
#perl的真假判别
#只有一下情况为假,其余为真
#"0" 零字符串
# "" 空字符串
# 0 数字零
# undef() 取值空
if($part == 1){
#条件语句---------------------------------------------------------------------------------------
#1、if语句
#形式: 1、if
# 2、if else
# 3、if elseif(一个或多个) else
$in=<STDIN>;
chomp($in);
if($in>97){
print '$in>a';
}else{
print '$in<a';
}
#2、 unless语句(功能同if相反,即是 else 的意思)
#形式:1、unless
# 2、unless else
unless($x==1){
print " message!/n";
}
#循环语句---------------------------------------------------------------------------
#1、while循环(条件为真时执行循环体)
#2、until循环(条件为假时执行循环体)
#如果条件一开始为假,则上面两种循环一次也不会执行!
$x=10;
until($x<=0){
print ' $x<=0';
$x--;
}
print "/n";
#3、do while/until 语句
#这两个循环体至少执行一次,do/while 是条件真执行循环体,do/until 是条件为假是执行!
$x=-10;
do{
print ' ',$x++;
}
until($x>=0);
print "/n";
#4、for循环 和C和Java没什么区别
#格式: for( ; ; ){ }
for($x=0,$x++; $x<=10; $x++,$x+=2){
print " $x";
}
print "/n";
#5、foreach循环
#foreach接受一个 列表 变量(不一定是数组) ,并将其中的数据一一赋给某个给定的标量
#但要注意,循环结束后,某个给定的标量将回到初始值!
@x=('Hello',' perl','! '); # @x 与 $x 完全不同,不一样的两变量!
print "$x/n";
foreach $x (@x) { #等价 foreach (@x){
print $x; # print;
} # }
print "/n",$x,"/n"; # $x 的值为改变!
#注意:foreach所用的列变量可以是任何值为列表的语句,不一定要数组变量,甚至还可以
#不写标量变量,让Perl使用默认的变量 " $_ "。在Perl中,许多运算都会以" $_ " 做为默认的变
#量,任何地方都可以用一般的变量取代" $_ "。
#注意:在foreach里面操作会改变 原列表 变量里面的值!
#其它控制语句-------------------------------------------------------------------------
#1、标记修饰符(标号)
#在c语言中如果想—次跳过多个循环,一定要用到难缠的goto语句不可。在Perl中就
#比较简单了,只要为想去执行的代码块取个名宁,即标记(label),再配合其他控制语句如
# redo、next、last 就可以了。
#选定标记之后,只要把它放在需要的语句前而,并加上冒号即可!
#2、修改循环控制结构的语句:redo nest last
#◆last
# last 语句会中断最内侧的循环,继续执行紧临区段后的语句。 last 语句可以带也可以不带
#标号修饰符!
#使用不带标号修饰符的 last 语句时,退出当前语句块;使用常标号修饰符的 last 语句时,
#退出与所带标号修饰符相关酌语句块。
#注意,退出的语句块也可能是在当前语句块以上的好几层。
# last 语句只会对循环代码块起作用,其他有文法结构的语句代码块并不能用 last 语句中断。
#总的来说,if/else 以及 do while/until 的代码块不能用Iast来中断,只有for、foreach、
#whle、until 以及“普通代码块”才可以。所谓普通代码块,是指不属于 if/else 、循环
#或函数的代码块。
#◆next
# next 只是略过 循外 剩下来的语句,但不会中断循环。
# next 语句可以带也可以不带标号修饰符:使用不带标号修饰符的 next 语句时,退出本次
#执行的当前循环语句块,继续判断循环条件执行循环;使用带标号修饰符的 next 语句时,退出与
#所带标号修饰符相关联的循环,仍需要继续判断循环条件执行循环。
#◆redo
#它可以跳到循环的最前面,但不会再执行一次控制语句。
# redo 语句也可以带或不带标号修饰符,不带标号时, redo 语句跳到所在语句块的第一条
#语句上;带标号时,跳到与所带标号相关联的语句块的第一条语句上。
# redo 是Perl的一个特有命令,其含义是重复此次循环,即循环变量不变,回到循环
#起始点,但要注意 redo 命令在do循环中不起作用。
while($x<14){
print "/$x=$x/n";
if( ($x++)==13){
redo;
}
} # $x 可以取到14 , $x 最后取到了 15
#◆goto 语句
LABEL1:{
print "LABEL1,reach! ";
if($x++ ==15){
goto LABEL2;
}else{
goto LABEL3;
}
}
LABEL2:{
print "LABEL2,reach! ";
goto LABEL1;
}
LABEL3:{
print "LABEL3,reach! ";
if($x<18){
goto LABEL2;
}
print "last ./n";
}
#3、表达式修饰符
# expression if condition;
# expression while condition;
# expression until condition;
# expression unless condition;
#以上语句都先看 condition 的真假,然后执行 expression
#注意:expression 必须是简单表达式,不能是语句代码块。
print "yes! " if $x>8;
#4、&& ||
# && 同if
# || 同 unless
print "message&&1 " && print "message &&2 ";
print "message||1 " || print "message ||2/n"; #输出:yes! message &&2 1message||1
}