Login  |  繁體中文
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
Previous Issue

Perl 的應用案例介紹

Perl 在開放源碼界應用極廣,Yahoo、Amazon 等各大網站皆採用此一語言,但在國內,Perl 的實際應用並不常見。相較之下,PHP 等開放源碼語言在國內的實用率,或許比 Perl 更高。Perl 強大的文字處理能力、Regex 語法,使 Perl 在資料處理上,有其他語言難以項背的特性。在國外,Perl 除了商務應用,其觸角更已延伸到政府、學術機構等不同層面。看過這些國外的實際應用案例,也許妳/你可以考慮將 Perl 應用在目前遇到的問題上。之前看似麻煩的瑣事,或許就因為 Perl,而立即迎刃而解。


◎ 案例一:美國統計調查局(U.S. Census Bureau)

對政府機構來說,程式工具的選擇,多半與技術人員有不小的關連。Rachael LaPorte Taylor,已有八年以上 Perl 使用經驗,因為她,美國統計調查局使用 Perl 來架構統計調查網站,獲得三十年來最成功的結果。

Taylor 不諱言她的個人偏好,她說自己從 92 年進入職場就開始用開放源碼。她對這些解決方案間的良好整合感到滿意。

至於為什麼學 Perl?她解釋道,因為它是在網路上用 CGI 建構動態網頁所用的語言,它也是適用於各種系統管理工作的工具。Taylor 為統計調查局發展出兩套 Web 應用系統。The Census 2000 Initial and Final Response Rates 網站(rates.census.gov)與 FedStat's IMF(www.fedstats.gov/imf)。

rates.census.gov 是全國性推廣活動 HAKWAN 的一部份。該推廣活動是因應 1970 年起統計調查回覆率的急速銳減,希望鼓勵公眾參與統計調查活動。該網站自 2000 年啟用,很快地便從 38000 個地方政府單位,收到針對統計問卷的回覆。Taylor 的 Perl 程式處理彙整後的檔案,每晚會把新資訊貼在網站上。Taylor 表示,Census 開始營運後,平均每天會有 55000 次點閱與 44000 次檔案傳輸。結果超乎預期。

FedStat 的國際貨幣基金組織(IMF,International Monetary Fund)網站是 Taylor 以 Perl 發展的第二套 Web 應用程式。FedStats/IMF 程式藉由 Perl 的 LWP 和 DBI 模組,擷取來自 14 個不同統計機構網站的原始檔案,更新至 MySQL 資料庫。這套網站可以顯示所有國家財政與經濟指標概況,並每兩天更新其資訊。由於其威力與簡潔,國際貨幣基金組織其他參與國,不久後紛紛要求協助建構該類 系統。

案例二:加拿大海關及稅務局
(The Canada Customs and Revenue Agency)

Jay Lawrence 在 mod_perl 郵件論壇上發表了加拿大海關及稅務局的 Perl 成功案例。該機構內約有 10000 份表格、指南與其他文件,需要加以管理與維護。該機構過去六、七年間,使用私有資料庫軟體維護這些表格,成本高且擴充困難。為了符合需求上的演進和改變, 該系統亟待升級或置換。該機構利用 Linux、mod_perl、MySQL,以一年的作業成本,置換整套系統。

CCRA 針對表單管理的營運需求,建構了客制化的文件管理系統,EDDS。透過 Perl,該機構的報表流程由原先以週為單位,縮短到以日為單位。Perl 也讓該機構得以修正六、七年前,由於 Web 發佈流程尚未普遍,硬湊出來的怪異做法。附帶一提,因為丟棄舊有軟體,CCRA 和其客戶終於可以拋棄數據機,進入全球資訊網的世界。

Jay Lawrence 寫道,CCRA 樂於了解到 Perl 這一套萃取與報表上最具實用的語言。該專案達成的時間與成本效率,可說是此一說法的最佳驗證。

◎ 案例三:巴布亞新幾內亞大學學生事務管理

藉由 Project Breeze,Perl 使巴布亞新幾內亞大學自然與物理科學學院,得以更精確且更有效率地,處理學生事務資料。1999 年,該大學將原來由兩學期組成的學年,改為三個學期。學年制的改變使自然與物理科學學院重新評估學生記錄的資料處理程序。當時,該程序主要還是用人工手動 輸入 Excel。

在該大學,主要的計算環境為 Windows 作業系統和 Excel、Word 等應用軟體。自然與物理科學學院必須處理五百位學生資料,過程中得涉及約 6000 個 Excel 欄位。這樣的過程每年得執行三次。當該大學引入新的學年制,該學院副院長 Alfred Vahau,也是 Breeze 專案的領導人,了解有必要將此一程序自動化。該專案即是為此一資料處理流程尋求替代方案。

為了彙整 Excel 內的學生與修課資訊,Vahau 利用 Perl 讀取兩個輸入檔案。Takanori Kawai 的 Spreadsheet::ParseExcel 模組可以將 Excel 檔案轉換為 ASCII 格式,藉此,Vahau 的 Perl 程式,得以彙整六個不同的學科的 Excel 檔案。接著,再利用 John McNamara 的 Spreadsheet::WriteExcel 模組,將結果輸出為 Excel 檔案。建構了此一具備迅速提供精確結果的系統,學院職員只需要一天便可完成計算成績的工作。對學生而言,他們可以在新學期開始前,了解自己的修課狀態。

Breeze 仍持續發展中,未來目標包括引入資料庫,以提供學生入學到畢業間所有資訊。Alfred Vahau 表示雖然 Breeze 尚未跨入其他學院,不久後將發展的物件導向版 Breeze,將解決大學範疇下的學生管理問題。

◎ 案例四:John Cabot 大學教授課程評鑑系統

Ettore Vecchione,John Cabot 大學數學、電腦科學及自然科學系主任,也是一位 IT 專家,他利用 Perl、Apache、MySQL,為該所大學院校,解決了教授與課程評鑑資料的處理時間。John Cabot 大學位於羅馬,該大學一向以手動方式,輸入教授與課程評鑑資料至 Excel 與 Word 檔案,此一方式的處理時間因為當時招生人數增加,逐漸令人難以接受。粗略估計,該校每學期有 105 到 115 門課程,必須花上四到六週的資料輸入與編排時間。每年此一程序須重複四次。每一年,有多達 4600 份評鑑資料得透過人工輸入電腦。

Vecchione 為了解決職員的負荷,消除資料收集上的人工錯誤,他決定發展一套可自動化此程序的系統,讓學生透過在 Apache 伺服器上執行的 Perl/CGI 程式,輸入他們的評鑑結果。資料會儲存在 MySQL 資料庫,稍後由 Perl 程式處理,輸出成相應的 Excel、Word 檔案。

這套系統讓 Vecchione 花了八個月時間設計、開發、測試與除錯。在 Pentium II 700Mhz 的機器上,該系統輸出包含約 105 個工作表,約 56000 個欄位、內含教授統計資料的 Excel 檔案,花了不到 11 分鐘。產生約 24000 字、包含學生批評資料的 Word 檔案,該系統花了約 9 分鐘。Vecchione 認為具有相同規格的商用系統,成本約 1500萬,而他只花了不到 500 元。

◎ 案例五:瑞士洛桑(Lausanne)大學醫院病理資料庫轉移

洛桑大學醫院病理學實驗室過去十年間,一直採用 Ingres ARUNA 資料庫系統。對於每年處理超過 5 萬份實驗室樣本,並負責管理 50 萬份病例記錄的設備,該實驗室希望將其轉換為 Oracle DIAMIC 套件的決定,不是一件輕鬆的工作。除非,你懂 Perl。

Perl 幫助 Marc-Henri Poget,為他簡化了資料庫轉移的複雜工作。洛桑大學醫院為一所擁有 850 張病床的醫院,為瑞士法語區 60 萬人口提供醫療服務。2000 年時,該醫院的病理實驗室希望用比較開放且具發展性的 DIAMIC 軟體套件,更換已使用十年的 ARUNA 資料庫。對於一套儲存超過二十年以上醫學資料的系統,該院病理學者時診斷,十分依賴該系統的資料。這個轉移工作具有相當大的挑戰。

廠商提供的策略,是以 Excel 和 ODBC,從 Ingres ARUNA 資料庫將資料萃取成為檔案,再將該檔案匯入和原有資料庫結構相同的 Oracle 資料庫,最後利用廠商的應用軟體,將該 Oracle 資料庫的資料,移轉給 Oracle DIAMIC 資料庫。

這樣的做法有許多問題。首先,由於 Ingres 和 Oracle 資料庫都在 Unix 機器上,沒理由使用 Windows 應用軟體做中介。其次,Excel 並不容許從 Ingres 資料庫萃取和處理非常大的檔案。何況,廠商無法保證 Oracle ARUNA 資料庫的表格和 Ingres ARUNA 資料庫百分之百相同。

Marc-Henri Poget 最後決定完全在 Unix 平台上開發 Perl 程式,來解決這些問題。他撰寫了 Perl 的 DDL 產生程式(DLL Generation Script),用來對應 Ingres 和 Oracle 資料庫之間不同的資料型別,並且在 Oracle ARUNA 資料庫上產生資料表。為了提供更細緻的資料萃取方式,他發展了 Perl 萃取程式(Extract script),透過 DBI 和 Ingres DBD,依照命令列的指示,從資料庫萃取所需資料。此一方式讓 Marc-Henri Poget 在數小時內,成功地將 50 萬名病人相關的病例記錄,移轉到新的資料庫中。

相關網址:

1. Perl 成功案例: Perl 治癒了瑞士醫院的資料庫移轉陣痛
2.
Perl 成功案例: John Cabot 大學教授課程評鑑系統
3.
Perl 成功案例: 巴布亞新幾內亞大學用 Perl 管理學生事務
4.
Perl 成功案例: Perl 為 CCRA 提供文件管理與管制
5.
統計調查局的 Perl 成功案例




OSSF Newsletter : 第 10 期 YAPC::Taipei & Perl(上)

Category: FOSS News