1. 更多控制结构
1.1 unless 控制结构
unless($fred =~ /^[A-Z_]/w*$/i){
print “The value of /$fred doesn’t look like a Perl identifier name./n”;
}
相当于
if($fred =~ /^[A-Z_]/w*$/i){
#什么也不做
}else{
print “The value of /$fred doesn’t look like a Perl identifier name./n”;
}
unless ($mon =~ /^Feb/){
print “This month has at least thirty days./n”;
}else{
print “Do you see what’s going on here?/n”;
}
相当于
if($mon =~ /^Feb/){
print “Do you see what’s going on here?/n”;
}else{
print “This month has at least thirty days./n”;
}
1.2 until 控制结构
有时,希望将while 循环的条件部分取反。此时,可以使用until:
until($j > $i){
$j *=2;
}
1.3 表达式修饰符
print “$n is a negative number./n”if $n<0;
&error(“Invalid input”) unless &valid($input);
$i *= 2 unitl $i > $j;
print “”, ($n += 2) while $n <10;
&greet($_) foreach @person;
1.4 The Naked Block 控制结构
你也可能在其它地方使用过“裸的”块,这通常是为临时变量提供作用域:
{
print “Please enter a number:”;
chomp(my $n = <STDIN>);
my $root = sqrt $n; #计算平方根
print “The square root of $n is $root./n”;
}
1.5 elsif 语句
if(!defined $dino){
print “The value is undef./n”;
}elsif($dino =~ /^-?/d+/.?$/){
print “The value is an integer./n”;
}elsif($dino =~ /^-?/d*/./d+$/){
print “The value is a _simple_ floating-point number./n”;
}elsif($dino eq‘’){
print “The value is the empty string./n”;
}else{
print “The value si the string ‘$dino’./n”;
}
1.6 自增和自减
$bedrock++; #$bedrock 的值加1
$bedrock--; #$bedrock 值减1
和c一样可以有++$bedrock和--$dedrock意义和c也一样
1.7 for 控制结构
用法和c一样
1.8 循环控制
1.8.1.last 操作
last 会立刻结束循环。(这同C 语言或其它语言中的“break”语句类似)
1.8.2.next 操作
next 之后,又会进入下一轮循环(这和C 或者类似语言的“continue”相似
1.8.3.redo 操作
它会调到当前循环块的顶端,不进行条件表达式判断以及接着本次循环。(在C 或类似语
言中没有这种操作。)
next 和redo 的最大区别在于,next 会进入下一次循环,而redo 会继续执行本次循环
1.8.4.标签块
如果要从最内层的循环中跳出来,可以使用标签(label)
LINE: while(<>){
oreach (split){
last LINE if /_ _END_ _/; #推出Line 循环
…
}
}
1.9 逻辑操作符
&&和||
和c语言一样,如果是&&,前面的判断失败后就直接返回,不会执行后面的东西
如果是||,前面成功之后也不会执行后面的东西,这叫短路
1.9.1.短路操作的值
和c不同的是它的返回值不再是简单的boolean值
my $last_name = $last_name{$someone} ||‘(No last name)’;
如果$someone 不在hash 中,则左侧值为undef,为false。从而,右侧代码将被执行,并将其作为默认值
1.9.2. 三元操作符?:
和c一样
1.9.3.控制结构:使用部分求值的操作符
($m < $n) && ($m = $n); #相当于:if($m < $n) {$m = $n }
这些都很简单,||和?:都可以用来做控制结构,只要我能读懂就行了,这些东西其实可读性不强,最好不要用