Perl 是一個非常強大的文字資料處理語言。
Perl 中可以使用format 定義一個模板,然後使用write 依指定模板輸出資料。
Perl 格式化定義語法格式如下:
format FormatName =fieldlinevalue_one, value_two, value_threefieldlinevalue_one, value_two.
參數解析:
FormatName :格式化名稱。
fieldline :一個格式行,用來定義一個輸出行的格式,類似@,^,,| 這樣的字元。
value_one,value_two…… :資料行,用來向前面的格式行插入值,都是perl的變數。
. :結束符號。
以下是一個簡單是格式化實例:
執行以上實例輸出結果為:
first: googlesecond: coderctothird: taoba
格式行以@ 或^ 開頭,這些行不作任何形式的變數代換。
@ 字段(不要同數組符號@ 相混淆)是普通的字段。
@,^ 後的<, >,| 長度決定了字段的長度,如果變數超出定義的長度,那麼它將被截斷。
<, >,| 也分別表示,左對齊,右對齊,居中對齊。
^ 欄位用於多行文字區塊填充。
值域的格式,如下表所示:
格式 | 值域意義 |
---|---|
@<<< | 左對齊輸出 |
@>>> | 右對齊輸出 |
@||| | 中對齊輸出 |
@##.## | 固定精度數字 |
@* | 多行文字 |
每個值域的第一個字元是行填充符,當使用@字元時,不做文字格式化。
在上表中,除了多行值域@*,域寬都等於其指定的包含字元@在內的字元數,例如:
@###.##
表示七個字元寬,小數點前四個,小數點後兩個。
實例如下:
以上實例輸出結果為:
===================================Ali 20 2000.00============ ==================================================== ========Codercto 30 2500.00================================================= =====================Jaffer 40 4000.00========================== =========
$~ ($FORMAT_NAME) :格式名稱$^ ($FORMAT_TOP_NAME) :目前的表頭格式名字儲存在
$% ($FORMAT_PAGE_NUMBER) :目前輸出的頁號
$= ($FORMAT_LINES_PER_PAGE) :每頁中的行數
$| ($FORMAT_AUTOFLUSH) :是否自動刷新輸出緩衝區存儲
$^L ($FORMAT_FORMFEED) :在每一頁(除了第一頁)表頭之前需要輸出的字串儲存在
以下是一個簡單是使用$~ 格式化的實例:
執行以上實例輸出結果為:
================================= Text # 碼農教學============ ==================================================== ==== Text # 碼農教學===================================
若未指定$~的情況下,會輸出名為STDOUT的格式:
執行以上實例輸出結果為:
---------------- STDOUT格式----------------
下列實例我們透過新增報表頭部資訊來示範$^ 或$FORMAT_TOP_NAME 變數的使用:
以上實例輸出結果為:
===================================Name Age============= ==================================================== =======Ali 20 2000.00======================================== ==============================Codercto 30 2500.00================================================= =====================Jaffer 40 4000.00========================== =========
我們也可以使用$% 或$FORMAT_PAGE_NUMBER 為報表設定分頁:
以上實例輸出結果為:
===================================Name Age Page 1=========== ==================================================== =========Ali 20 2000.00====================================== ================================Codercto 30 2500.00================================================= =====================Jaffer 40 4000.00========================== =========
預設函數write將結果輸出到標準輸出檔案STDOUT,我們也可以使它將結果輸出到任意其它的檔案中。最簡單的方法就是把檔案變數當作參數傳遞給write,如:
write(MYFILE);
以上程式碼write就用預設的名為MYFILE的列印格式輸出到檔案MYFILE中。
但這樣就不能用$~變數來改變所使用的列印格式。系統變數$~只對預設檔案變數起作用,我們可以改變預設檔案變量,改變$~,再呼叫write。
執行成功後,我們可以查看tmp 檔案的內容,如下所示:
$ cat tmp ================================= 輸入到檔案中========== =========================
我們可以使用select改變預設檔變數時,它會傳回目前預設檔變數的內部表示,這樣我們就可以建立子程序,按自己的想法輸出,又不會影響程式的其它部分。
執行成功後,我們可以查看tmp 檔案的內容,如下所示:
$ cat tmp ================================= 輸入到檔案中========== ==================================================== ====== 使用定義的格式輸入到檔案中===================================