在 BASH 腳本程序中,我們用 read var 來實現(xiàn)從鍵盤的輸入,用 echo $var 來實現(xiàn)輸出。那么在 Perl 中將有一點變化。Perl 中將標(biāo)準(zhǔn)輸入用關(guān)鍵詞 $var= 在 Perl 語言中,變量 $_ 是許多操作符的缺省變量。因此如果需要讀入許多行并對每行分別處理一般這樣寫: while($_= 或者可以簡寫為: while( 如果 <> 括號之間沒有任何字符,則表示從命令行所指示的文件中讀取數(shù)據(jù),看下面這個例子(read.pl): #!/usr/bin/perl; 如果在命令行輸入 $ perl read.pl read.pl 。這個程序?qū)⒃谄聊簧洗蛴〕鑫募?read.pl 的每一行。 在前面的例子中我們已經(jīng)看見,Perl 語言中向標(biāo)準(zhǔn)輸出輸出數(shù)據(jù)可以用 print 語句。我們在 print 語句中可以輸出多個變量,變量之間用 "," 分隔開來。如下面的例子: print 3,45*2,"hello",2+2; 上面的輸出語句將給出 "390hello4" 的輸出結(jié)果。 除了 print 語句以外,Perl 中還提供了一個 printf 語句用于標(biāo)準(zhǔn)輸出,不過 printf 更接近于 C 語言的 printf 函數(shù),可以進行格式化的輸出,如: printf "%10s% 8d%8.2f\n",$a,$b,$c; 另外 print 和 printf 在輸出數(shù)組變量的時候也是不同的,如下例: @a = (1 , 2, 3); 輸出的結(jié)果是: 1 如果在 @a 兩邊加上 "" ,則輸出就都是 123了。 Perl 語言的 if...then...else... 語句結(jié)構(gòu)和 C 語言非常相似,該結(jié)構(gòu)一共有三種變種,分別如下: if 語法 1: if(判別運算式) 或?qū)懗桑?strong>表達式為真時的語句 if (判別運算式); 實例為:print "您的分?jǐn)?shù)及格了!\n" if ($score>=60); if 語法 2: if(判別運算式一){ if 語法 3: if (判別運算式一) unless的含義就是說“如果判別式不為真,就執(zhí)行...”。 unless 語法 1: unless(判別運算式) { 或?qū)憺椋?em>判別式為假時語句 unless (判別運算式); unless 語法 2: unless(判別運算式) 這些符號看上去像標(biāo)點符號,或是表達式的一部分。和 C 語言中一樣,他們在 Perl 語言中也可作為控制結(jié)構(gòu),而且更簡潔,只是可讀性差了很多。 比如說: 也可以寫為: 同樣道理,unless(this){that} 可替換為 this||that。 exp1?exp2:exp3 這個式子表示:如果 exp1 為真則求 exp2 的值,否則求 exp3 的值。 Perl 語言中 while, do...while, for, until, foreach 均可以用于實現(xiàn)循環(huán)結(jié)構(gòu),循環(huán)中還可以用 last,next,redo 等操作符進行控制。下面我們先介紹 while 語法。 while(判別運算式) { 上個語法在Perl中也可以寫成: 程序敘述區(qū)塊 while(判別運算式); do 在 while 和 do while 循環(huán)最大的區(qū)別是在 do while 循環(huán)中,循環(huán)體至少會被執(zhí)行一次。 until(判別運算式) 上個語法在Perl中也可以寫成: 程序敘述區(qū)塊 until (判別運算式); do{ for (初始化運算式;判別運算式;循環(huán)過程運算式) 或者 for $variable(@array) 第二個語法中如果把 $variable 變量省略的話,就會將數(shù)組 @array 的元素一個一個指定給 $_ 這個變量,這是比較精簡的寫法。其中第一個語法更接近于 C 語言的語法。 foreach $variable(@array) 如果把$variable變量省略的話,就會將數(shù)組@array的元素一一指定給$_這個內(nèi)定的輸出變量. 范例: for($i=1;$i<=10;$i++) 范例: for($i<=10;$i++)
@var=
chop($_); # chop 調(diào)用用于去掉 $_ 變量中的最后一個字符(換行符)。
# 處理$_(每一行)
}
chop; # 等同于chop($_)
# 處理$_(每一行)
}
while(<>){
print $_;
}
printf("%10s% 8d%8.2f\n",$a,$b,$c); # 加上括號的 C 語言寫法也是可以的。
printf @a;
print "\n";
print @a;
print "\n";
1232 分支循環(huán)控制結(jié)構(gòu)
if 語法
{
表達式為真時的語句塊;
}
判別式一為真時的語句塊;
}else{
判別式一為假時的語句塊;
}
{
判別式一為真時的語句塊;
}elsif(判別運算式二){
判別式二為真時的語句塊;
}elsif(判別運算式三){
判別式三為真時的語句塊;
}else{
所有判別式為假時的語句塊;
}unless 語法
判別式為假時語句塊;
}
{
判別式為假時語句塊;
}else{
判別式為真時語句塊;
}進階技巧:"&&"、"||" 及 "? :"
if (判別表達式) {為真時語句塊};
判別表達式 && 為真時的語句塊
: 則可以這樣使用:while 循環(huán)語法
程序敘述區(qū)塊;
}do...while 循環(huán)語法
{
程序敘述區(qū)塊;
}while(判別運算式);until 循環(huán)語法
{
程序敘述區(qū)塊;
}do...until 循環(huán)語法
程序敘述區(qū)塊;
}until (判別運算式);for 循環(huán)語法
{
程序敘述區(qū)塊;
}
{
程序敘述區(qū)塊;
}foreach 循環(huán)語法
{
程序敘述區(qū)塊;
}last 退出循環(huán)語法
{
last if ($i==5); # 如果 $i 等于5的話就退出 for 循環(huán)
print"$i\n";
}next 繼續(xù)循環(huán)語法
{
# 如果是 2 的倍數(shù)的話,就到循環(huán)的下一個陳述
next if($i%2)==0)
print"$i是一個奇數(shù)!\n";
}