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 }
這些都很簡單,||和?:都可以用來做控制結構,只要我能讀懂就行了,這些東西其實可讀性不強,最好不要用