- 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 使用稱為“格式”的編寫模板來輸出報表。要使用 Perl 的格式功能,首先必須定義一個格式,然後才能使用該格式來編寫格式化資料。
定義格式
以下是定義 Perl 格式的語法:
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
這裡 FormatName 表示格式的名稱。fieldline 是資料應如何格式化的特定方式。values 行表示將輸入欄位行的值。您用一個句點結束格式。
下一個 fieldline 可以包含任何文字或欄位佔位符。欄位佔位符保留用於稍後放置在那裡的資料的空間。欄位佔位符具有以下格式:
@<<<<
此欄位佔位符左對齊,欄位空間為 5。您必須計算 @ 符號和 < 符號以瞭解欄位中的空格數。其他欄位佔位符包括:
@>>>> right-justified @|||| centered @####.## numeric field holder @* multiline field holder
格式示例如下:
format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== .
在此示例中,$name 將以左對齊的方式寫入 22 個字元的空間內,然後 age 將寫入兩個空格。
使用格式
為了呼叫此格式宣告,我們將使用 write 關鍵字:
write EMPLOYEE;
問題是格式名稱通常是開啟的檔案控制代碼的名稱,write 語句會將輸出傳送到此檔案控制代碼。由於我們希望資料傳送到 STDOUT,因此我們必須將 EMPLOYEE 與 STDOUT 檔案控制代碼關聯。但是,首先,我們必須確保 STDOUT 是我們選擇的檔案控制代碼,使用 select() 函式。
select(STDOUT);
然後,我們將透過使用特殊變數 $~ 或 $FORMAT_NAME 將 EMPLOYEE 與 STDOUT 關聯,如下所示設定新的格式名稱:
$~ = "EMPLOYEE";
當我們現在執行 write() 時,資料將傳送到 STDOUT。請記住:如果您要將報表寫入任何其他檔案控制代碼而不是 STDOUT,則可以使用 select() 函式選擇該檔案控制代碼,其餘邏輯將保持不變。
讓我們以以下示例為例。這裡我們硬編碼了值,僅用於演示用法。在實際使用中,您將從檔案或資料庫中讀取值以生成實際報表,並且您可能需要再次將最終報表寫入檔案。
#!/usr/bin/perl
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
@n = ("Ali", "Raza", "Jaffer");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n) {
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
執行後,將產生以下結果:
=================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
定義報表標題
一切看起來都很好。但是您可能希望向報表中新增標題。此標題將列印在每一頁的頂部。這樣做非常簡單。除了定義模板外,您還需要定義標題並將其分配給 $^ 或 $FORMAT_TOP_NAME 變數:
#!/usr/bin/perl
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
format EMPLOYEE_TOP =
===================================
Name Age
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;
@n = ("Ali", "Raza", "Jaffer");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n) {
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
現在您的報表將如下所示:
=================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
定義分頁
如果您的報表佔用超過一頁怎麼辦?您有一個解決方案,只需使用 $% 或 $FORMAT_PAGE_NUMBER 變數以及標題,如下所示:
format EMPLOYEE_TOP =
===================================
Name Age Page @<
$%
===================================
.
現在您的輸出將如下所示:
=================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
每頁的行數
您可以使用特殊變數 $=(或 $FORMAT_LINES_PER_PAGE)設定每頁的行數,預設情況下 $= 為 60。
定義報表頁尾
雖然 $^ 或 $FORMAT_TOP_NAME 包含當前標題格式的名稱,但沒有相應的機制可以自動對頁尾執行相同操作。如果您有一個固定大小的頁尾,則可以在每次 write() 之前檢查變數 $- 或 $FORMAT_LINES_LEFT 並使用如下定義的另一個格式在必要時自行列印頁尾:
format EMPLOYEE_BOTTOM =
End of Page @<
$%
.
有關與格式相關的完整變數集,請參閱 Perl 特殊變數 部分。