Perl part I

ArticleCategory: [Es gibt verschiedene Artikel Kategorien]

Software Development

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Guido Socher

en to cnKevin Hsu

AboutTheAuthor:[Eine kleine Biographie über den Autor]

Guido 是個使用 Linux 很久的Linux 迷。最近他開始擔任 LinuxFocus 的編輯。這些日子他也忙著改建房子, 並且在花園種些生菜或其它蔬菜等。

Abstract:[Hier sollte eine kleine Zusammenfassung stehen]

這是一系列有關 perl 文章的第一篇。您不需有任何特別的經驗就可以瞭解這篇文章。任何程序程式設計語言 (例如 C 或 Pascal) 將會讓學習 perl 的開始更為容易。

ArticleIllustration:[Das Titelbild des Artikels]

[Illustration]

ArticleBody:[Der eigentliche Artikel. Überschriften innerhalb des Artikels sollten h2 oder h3 sein.]

什麼是 perl ?

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=; 這一行提示使用者輸入且它會等到使用者按下 return 鍵時。這一行後面的變數 $name 將保存使用者鍵入的資料, 包括換行符。chomp($name); 會將此換行符號從變數 $name 中刪除。最後 length 函數則用來計算 $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 的基本觀念。這系列文章會持續下去且馬上就會出現更加複雜的程式。

相關參考文件

這個系列文章可讓你一步步循序漸進的學習 perl。不過您可以現在就去下載這個小 參考手冊(perlref-5.004.1.tar.gz)。 它包含了 README 文件說明如何列印成一個小冊子。

你也可試著用 "man perl" 和 "man perlfunc" 來觀看有那些可以使用的函數。不過所有這些多半都用來當作參考。你應該跟著本系列文章或者閱讀相關書籍, 例如 "Learning Perl"( O'Reilly出版)此本書來學習 perl。