學(xué)習(xí)筆記 詳解Perl格式化輸出
本文和大家重點(diǎn)討論一下Perl格式化輸出的概念,我們已經(jīng)見過用print函數(shù)將原始的未格式化的文本輸出到文件,本章講述如何用函數(shù)write和打印格式來生成格式化的輸出。
Perl格式化輸出
我們已經(jīng)見過用print函數(shù)將原始的未格式化的文本輸出到文件,本章講述如何用函數(shù)write和打印格式來生成格式化的輸出。
一、Perl格式化輸出之定義打印格式
定義打印格式的關(guān)鍵字為format,語法為:
formatformatname=
lines_of_output
◆打印格式名formatname的命名規(guī)則與一般變量相同。結(jié)束行為一個(gè)句號(hào),此行不能有任何其它字符,包括空格,句號(hào)必須是該行第一個(gè)字符。
打印格式的定義象子程序一樣可以放在任何地方,甚至可以放在條件語句中,但是最好把它們集中放在程序的開頭或結(jié)尾。
二、Perl格式化輸出之顯示打印格式
打印格式的顯示有兩步:
1、將系統(tǒng)變量$~設(shè)成所要使用的格式
2、調(diào)用函數(shù)write
例如:
- 1:#!/usr/local/bin/perl
- 2:
- 3:$~="MYFORMAT";
- 4:write;
- 5:
- 6:formatMYFORMAT=
- 7:===================================
- 8:HereisthetextIwanttodisplay.
- 9:===================================
- 10:.
結(jié)果輸出如下:
$program
===================================
HereisthetextIwanttodisplay.
===================================
$
如果不用$~指定打印格式,Perl解釋器就假定要使用的格式名與要寫入的文件變量同名,在本例中,如果不指定使用MYFORMAT,則Perl解釋器試圖使用名為STDOUT的打印格式。
三、Perl格式化輸出之在打印格式中顯示值
我們使用打印格式的主要原因當(dāng)然是格式化存貯在簡(jiǎn)單變量或數(shù)組變量中的值從而生成可讀性好的輸出,這一目的用“值域”來實(shí)現(xiàn)。每個(gè)值域指定一個(gè)值,如變量或表達(dá)式,調(diào)用write函數(shù)時(shí),該值就以值域指定的格式顯示。
1、通用的打印格式
打印格式的一個(gè)缺點(diǎn)是定義中包含了變量名,例如:
- formatMYFORMAT=
- ==========================================================
- Thewinningnumberis@<<<<<<!
- $winnum
- ==========================================================
◆當(dāng)調(diào)用write輸出此格式時(shí),必須記著它使用了變量$winnum。用子程序和局域變量就可以創(chuàng)建更通用的打印格式。
2、格式和局域變量
在上例中,你可能已經(jīng)注意到子程序write_letter調(diào)用write輸出字母及其出現(xiàn)次數(shù),即使格式定義在子程序外部仍能正常工作。在第17行中將字母及其出現(xiàn)次數(shù)傳遞給該子程序,在子程序中,打印格式使用局域變量$letter和$value,這樣保證了在foreach循環(huán)中每次輸出當(dāng)前的字母和值。
然而要注意的是,使用my定義的局域變量要求格式定義在子程序內(nèi)部,否則就不會(huì)輸出,因此,用write輸出的局域變量一定要用local定義。(local和my詳見《子程序》一章)
注:Perl4中沒有my函數(shù),故不會(huì)有此問題。
3、選擇值域格式
我們已經(jīng)知道了打印格式和write函數(shù)怎么工作,現(xiàn)在來看看值域的格式,見下表:
每個(gè)值域的第一個(gè)字符是行填充符,當(dāng)使用@字符時(shí),不做文本格式化。對(duì)文本的格式化稍后來講。
在上表中,除了多行值域@*,域?qū)挾嫉扔谄渲付ǖ陌址鸃在內(nèi)的字符個(gè)數(shù),例如:
@###.##
表示七個(gè)字符寬,小數(shù)點(diǎn)前四個(gè),小數(shù)點(diǎn)后兩個(gè)。
4、輸出值域字符
在打印格式里,特定字符如@、<和>被看作值域定義,那么如何將它們輸出呢?方法如下:
formatSPECIAL=
Thislinecontainsthespecialcharacter@.
"@"
【編輯推薦】
- Perl if語句用法實(shí)例解析
- Perl文件句柄概念詳解
- 實(shí)例解析Perl守護(hù)進(jìn)程用法
- Perl模式匹配經(jīng)驗(yàn)總結(jié)
- 術(shù)語匯編 Perl變量中Perl關(guān)聯(lián)數(shù)組用法解析