2010年6月28日 星期一

Perl學習之旅的回顧(之一)

自從2001年接觸Perl這個程式語言,許多方面的知識跟Perl產生了連結之後,好像會變得比較容易理解,對我而言,這是個感覺奇妙的學習之旅。

從一開始,Perl的資料結構:scalar純量、array陣列以及hash雜湊,簡化了程式的撰寫與資料處理的力量,經由這三類資料型態,可以處理大部分的問題。

Perl的處理速度以及記憶體管理也讓我對於資料處理有著深刻的印象。

舉個例子來說,我初學Perl的時候,由於已有其他程式語言的經驗,
所以看了一些語法之後,想要寫個程式來試試看,但又不想寫什麼迴圈九九乘法表之類的,
於是想到"聖經",聖經可以線上下載取得,中英文都有,內容文字量也夠多,
處理起來應該比較趨近於實務狀況。

實際下載後,文字檔大小約3.5MB(31,102行),摘錄部份內容如下:

Gen 1:1 起初 神創造天地。
Gen 1:2 地是空虛混沌.淵面黑暗. 神的靈運行在水面上。
Gen 1:3  神說、要有光、就有了光。
Gen 1:4  神看光是好的、就把光暗分開了。
Gen 1:5  神稱光為晝、稱暗為夜.有晚上、有早晨、這是頭一日。
Gen 1:6  神說、諸水之間要有空氣、將水分為上下。
Gen 1:7  神就造出空氣、將空氣以下的水、空氣以上的水分開了.事就這樣成了。
Gen 1:8  神稱空氣為天.有晚上、有早晨、是第二日。
Gen 1:9  神說、天下的水要聚在一處、使旱地露出來.事就這樣成了。
Gen 1:10  神稱旱地為地、稱水的聚處為海. 神看著是好的。

我就試著寫一個聖經全文檢索程式,而整個程式碼及執行結果讓我覺得很神奇,如此簡潔、如此快速,程式如下。
use strict;

open BB ,'<', 'hb5_utf8.txt'
    or die "$!";

# 將檔案內容全部置於陣列變數@bible)內
my @bible = ;
close BB;

while (1) {

    print "請輸入查詢文字(q=結束):";
    my $search = ;

    chomp $search;

    exit if $search =~ /q/i;

    for my $words (@bible) {
        print "$words" if $words =~ /$search/o;
    }

}


執行結果

perl bible_demo.pl

請輸入查詢文字(q=結束):憂傷

Gen 6:6 耶和華就後悔造人在地上、心中憂傷
1Sa 2:33 我必不從我壇前滅盡你家中的人.那未滅的必使你眼目乾癟、心中憂傷.你家中所生的人都必死在中年。
2Sa 12:18 到第七日、孩子死了。大衛的臣僕不敢告訴他孩子死了、因他們說、孩子還活著的時候、我們勸他、他尚且不肯聽我們的話、若告訴他孩子死了、豈不更加憂傷麼。
Psm 51:17  神所要的祭、就是憂傷的靈. 神阿、憂傷痛悔的心、你必不輕看。
Psm 69:29 但我是困苦憂傷的. 神阿、願你的救恩將我安置在高處。
Pro 17:22 喜樂的心、乃是良藥.憂傷的靈、使骨枯乾。
Pro 18:14 人有疾病、心能忍耐.心靈憂傷、誰能承當呢。
Ecc 1:18 因為多有智慧、就多有愁煩.加增知識的、就加增憂傷
Isa 16:7 因此、摩押人必為摩押哀號.人人都要哀號.你們摩押人要為吉珥哈列設的葡萄餅哀歎、極其憂傷
Isa 54:6 耶和華召你、如召被離棄心中憂傷的妻、就是幼年所娶被棄的妻.這是你 神所說的。

請輸入查詢文字(q=結束):

有了這麼一點小成果之後,我對於Unix世界充滿了信心,
自以為有了Perl的協助,自己將無所不能,
直到我發現自己苦心撰寫的程式,
其實在Shell底下,只要一行指令就可以做到一樣的結果時,
我有點傻了。

    grep 憂傷 hb5_utf8.txt

那時突然覺得資訊的世界不僅僅是DOS/Windows的世界,
這世界的範圍、力量,遠比我當時可以想像的大多了。

沒有留言:

張貼留言