Perl 有不少奇異的地方
沒有 switch 元件
Perl 沒有switch,perl 如果要達到 switch 的功能,就必須裝一些額外的模組。
如果不想裝,就得用一堆 if-elsif- ....-elsif-else 來取代。這裡的 elsif 常是初學者會打錯的地方,因為他拚作 elsif [正] 而不是 elseif [誤]。
正規表達式不太一樣
Perl 的正規表達式Regular Express(regex) 和別人不太一樣,有些是屬於PERL獨有的,這也是perl的強項:對文件檔案和字串的處理能力。
PERL的 regex 非常精采,此外, perl 多了一個 =~ 的運算符,這是別的語言沒有的東西,也是很多初學者的障礙。
迴圈中的元素是動態的
容許foreach 迴圈中動態加值進去,非常特別,例如以PHP作對比範例。
[PHP]
$arr= array("black","gray","white"); $ii=0; foreach($arr as $item){ if($ii==0){ array_push($arr,"yellow", "pink", "red"); } print $item; $ii++; } print_r( $arr);
第4行 迴圈中,在一開始時在陣列尾端加入項目"yellow", "pink", "red"
第5行 分別印出black gray white,但在迴圈中加入的"yellow", "pink", "red" 沒有印出
第8行 確認陣列的確是完整個6個項目
(
[0] => black
[1] => gray
[2] => white
[3] => yellow
[4] => pink
[5] => red
)
同樣的例子寫在 Perl 就不一樣,來看看:
[PERL]
my @arr = qw(black gray white); my $ii=0; foreach(@arr){ push(@arr,("yellow", "pink", "red")) if $ii==0; print $_."\n"; $ii++; }
雖然項目"yellow", "pink", "red"是在迴圈中被加入,還是會當成是迴圈陣列的一部分,第5行印出完整個六個項目:
gray
white
yellow
pink
red
在迴圈中被加入的項目,並且影響迴圈項目個數
換句話說,這樣子寫程式會變成無窮迴圈:
my @arr = qw(black gray white); foreach(@arr){ push(@arr,"green"); print $_."\n"; }
特殊字元和省略符號相當多
perl 的特殊字元大概有2 30個,常是初學者的障礙,就算是老手,有時要看這些特殊字元和省略符一堆的程式碼,也會看得一個頭兩個大;以我的經驗,大概自己寫的過一陣子不用太久,就會忘記自己寫什麼鬼了。
沒有真和假的BOOLEAN值
你不能設定變數為true或false,例如你不能設定 $a=true;
迴圈中沒有 break 的指令
取而代之是 last。舊版本的 last 並不是像break 立刻跳出迴圈,而是把迴圈的指標設為最後。
新版本的perl改善這個問題。
大括號完全不能省
一行運算式還是要大括號,頗煩的~~
例如 if(...){ 一行內容; } 這個大括號不能省。
沒有 /*..... */ 註解
可以包圍一個範圍的註解不存在,要註解一段的話,只能一行一行加 ''#'
編修原文 2009-11-19 02:38:02