original in en Guido Socher
en to cnKevin Hsu
Guido 是個使用 Linux 很久的Linux 迷。最近他開始擔任 LinuxFocus 的編輯。這些日子他也忙著改建房子, 並且在花園種些生菜或其它蔬菜等。
perl 是一個原本由 Larry Wall 所開發出來的腳本語言。原始碼可依照實際的 perl 程式直接被 "執行" 。此 perl 程式通常都被安置在 /usr/bin/perl 目錄中。Perl 在許多方面都與典型的 unix 程式awk 和 sed 相似, 不過 perl 有一直持續發展. 今天您甚至可以使用 perl 來作物件導向程式設計及設定圖形的使用者介面。Perl 可以輕易地利用在 CPAN 中很多的函式庫和 perl 原始碼庫來擴展它的功能. 這是第一篇文章所以不會進入進階的主題. 而我會想要展示給你的是一些基本的觀念, 而其它較進階部分留到稍後的文章中會介紹。
Perl 是一個非常有用的腳本語言. 它是一個任何有些程式設計技能的人之共同工具。
將下面的程式 使用 mylstprg 名稱儲存起來,
chmod 755 my1stprg .執行程式然後看看執行結果如何。
#!/usr/bin/perl -w
print "What is your name?\n"; $name=<STDIN>; #remove the new-line character: chomp($name); $len=length($name); print "\nHello $name! Your name is $len characters long\n"; |
我們來觀察一下這個原始碼。第一行並不是註解。這種由 "#!" 開頭是典型由 unix 腳本使用, 來告訴作業系統如何處理文字檔案。任何在第一行之後由 "#" 字元開頭都是註解 ( 請看例子中第 4 行). 我們也可以看到所有的敘述都以分號結尾。變數前面會加上一個錢符號 ($)。Perl 可使用的變數有字串、整數或浮點數。資料會根據變數使用時的上下文自動轉換成正確的類型。$-變數被稱為數值變數。Perl 也有陣列 (以 @ 來代替 $ 做開頭) 和雜湊表(以 % 來代替 $ 做開頭)。這些變數類型將在陸續的系列文章中討論。
在我們程式中第二行的 print 函數將一個文字字串寫到標準輸入設備(stdout)。它類似在 Shell scripts 中的 echo 命令。若字串利用雙引號括起來的話, 變數會展開替換成它的數值。在單引號中的變數不會展開其值, 此外, 要括住例如錢符號的特殊字元或引號括住引號時, 必須使用反斜線。這裡有個例子:
#!/usr/bin/perl -w
$name="joe"; print "1 $name\n"; print '2 ', $name , "\n"; print '3 ', '$name',"\n"; print "4 \"$name\"\n"; print "5 \$name\n"; print "6 \"\$name\"\n"; |
會產生下列結果:
1 joe
2 joe 3 $name 4 "joe" 5 $name 6 "$name" |
讓我們回頭觀看一開始那個簡單的程式。$name=
可惜的是我們這個程式有點缺點。當提示 your name 後, 如果你按下 tab 鍵或空白鍵的話, 會有什麼情況發生呢?就是這些字元也都會在字元長度中被計算到。那該如何改正它呢?
我們需要一些尋找和替代的函數來刪除 $name 中多餘的空白字元。Perl 對於文字的字串具有很好的處理能力並且也確實提供了上述的操作。[ \t]是相當於空白字元或移位字元的一個規則運算式 (regular expression)。在 perl 中它也被縮寫成 \s. (更多的有關 標準運算式的資訊請看此處).Perl 中的替代命令使用了標準運算式及有如下的語法:$name=~ s/regexp/replacement/g;。如果在 replacement 字串處是空白, 則所有符合條件之相應的 regexp 將被替代成空白。現在我們的程式會看起來像這樣:
#!/usr/bin/perl -w
print "What is your name?\n"; $name=<STDIN>; #remove the new-line character: chomp($name); print "\nHello $name!"; #remove spaces from the string: $name=~s/\s//g; $len=length($name); print " Your name is $len characters long\n"; |
這並不是一個很有用的程式, 因為它並沒有任何控制流程(迴圈、if 條件式)。但是它提供了 perl 的基本觀念。這系列文章會持續下去且馬上就會出現更加複雜的程式。
你也可試著用 "man perl" 和 "man perlfunc" 來觀看有那些可以使用的函數。不過所有這些多半都用來當作參考。你應該跟著本系列文章或者閱讀相關書籍, 例如 "Learning Perl"( O'Reilly出版)此本書來學習 perl。