- Perl 基礎
- Perl - 首頁
- Perl - 簡介
- Perl - 環境
- Perl - 語法概述
- Perl - 資料型別
- Perl - 變數
- Perl - 標量
- Perl - 陣列
- Perl - 雜湊表
- Perl - IF...ELSE
- Perl - 迴圈
- Perl - 運算子
- Perl - 日期與時間
- Perl - 子程式
- Perl - 引用
- Perl - 格式
- Perl - 檔案 I/O
- Perl - 目錄
- Perl - 錯誤處理
- Perl - 特殊變數
- Perl - 程式碼規範
- Perl - 正則表示式
- Perl - 傳送郵件
- Perl 高階
- Perl - 套接字程式設計
- Perl - 面向物件
- Perl - 資料庫訪問
- Perl - CGI 程式設計
- Perl - 包與模組
- Perl - 程序管理
- Perl - 嵌入式文件
- Perl - 函式引用
- Perl 資源
- Perl - 問答
- Perl - 快速指南
- Perl - 資源
- Perl - 討論
Perl 格式 - 報告編寫
如前所述,Perl 代表實用提取和報告語言 (Practical Extraction and Reporting Language),我們現在將討論使用 Perl 編寫報告。
Perl 使用名為“格式”的編寫模板來輸出報告。要使用 Perl 的格式功能,您必須:
- 定義格式
- 傳遞將顯示在格式中的資料
- 呼叫格式
定義格式
以下是定義 Perl 格式的語法
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
FormatName 代表格式的名稱。欄位行是資料應如何格式化的特定方式。值行代表將輸入欄位行的值。您用單個句點結束格式。
fieldline 可以包含任何文字或欄位佔位符。欄位佔位符保留用於稍後放置資料的空間。欄位佔位符的格式為:
@<<<<
此欄位佔位符左對齊,欄位空間為 5。您必須計算 @ 符號和 < 符號才能知道欄位中的空格數。其他欄位佔位符包括:
@>>>> right-justified @|||| centered @####.## numeric field holder @* multiline field holder
一個示例格式將是:
format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== .
在這個例子中,$name 將左對齊寫入 22 個字元空間內,之後 age 將寫入兩個空間。
呼叫格式以寫入資料
為了呼叫此格式宣告,我們將使用 write 關鍵字:
write EMPLOYEE; #send to the output
問題是格式名稱通常是開啟的檔案控制代碼的名稱,write 語句會將輸出傳送到此檔案控制代碼。由於我們希望資料傳送到 STDOUT,我們必須將 EMPLOYEE 與 STDOUT 檔案控制代碼關聯。但是,首先我們必須確保 STDOUT 是我們選擇的檔案控制代碼,使用 select() 函式
select(STDOUT);
然後,我們將透過使用特殊變數 $~ 將新的格式名稱設定為 STDOUT,從而將 EMPLOYEE 與 STDOUT 關聯。
$~ = "EMPLOYEE";
當我們現在執行 write() 時,資料將被髮送到 STDOUT。記住:如果您沒有將 STDOUT 設定為預設檔案控制代碼,您可以透過將 select 的返回值賦給標量值,並在特殊變數賦予格式名稱後使用此標量變數一起使用 select 來恢復到原始檔案控制代碼,以與 STDOUT 關聯。
上面的例子將生成以下格式的報告
Kirsten 12 Mohammad 35 Suhi 15 Namrat 10
定義報表頁首
一切看起來都很好。但是您可能希望向報表新增頁首。此頁首將列印在每一頁的頂部。這樣做非常簡單。除了定義模板外,您還必須定義一個頁首,其名稱相同,但附加了 _TOP 關鍵字,如下所示
format EMPLOYEE_TOP = ------------------------ Name Age ------------------------ .
現在您的報表將如下所示
------------------------ Name Age ------------------------ Kirsten 12 Mohammad 35 Suhi 15 Namrat 10
定義分頁和每頁行數
如果您的報表超過一頁怎麼辦?您有解決方法。使用 $% 變數以及頁首,如下所示
format EMPLOYEE_TOP = ------------------------ Name Age Page @< ------------------------ $% .
現在您的輸出將如下所示
------------------------ Name Age Page 1 ------------------------ Kirsten 12 Mohammad 35 Suhi 15 Namrat 10
您可以使用特殊變數 $=(或 $FORMAT_LINES_PER_PAGE)設定每頁的行數。預設情況下,$= 為 60。
定義報表頁尾
剩下的最後一件事是頁尾。與頁首非常相似,您可以定義頁尾,它將在每一頁之後寫入。在這裡,您將使用 _BOTTOM 關鍵字而不是 _TOP。
format EMPLOYEE_BOTTOM =
End of Page @<
$%
.
這將為您提供以下結果
------------------------ Name Age Page 1 ------------------------ Kirsten 12 Mohammad 35 Suhi 15 Namrat 10 End of Page 1
有關與格式相關的完整變數集,請參閱 Perl 特殊變數 部分。