從一開始,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的世界,
這世界的範圍、力量,遠比我當時可以想像的大多了。
沒有留言:
張貼留言