?? perl10.htm
字號:
表示七個字符寬,小數點前四個,小數點后兩個。<br>
<a name="3.4">4、輸出值域字符</a><br>
在打印格式里,特定字符如@、<和>被看作值域定義,那么如何將它們輸出呢?方法如下:<br>
<blockquote>
format SPECIAL =<br>
This line contains the special character @.<br>
"@"<br>
.
</blockquote>
<a name="4">四、輸出到其它文件</a><br>
缺省地,函數write將結果輸出到標準輸出文件STDOUT,我們也可以使它將結果輸出到任意其它的文件中。最簡單的方法就是把文件變量作為參數傳遞給write,如:<br>
write (MYFILE);<br>
這樣,write就用缺省的名為MYFILE的打印格式輸出到文件MYFILE中,但是這樣就不能用$~變量來改變所使用的打印格式。系統變量$~只對缺省文件變量起作用,我們可以改變缺省文件變量,改變$~,再調用write,例如:<br>
select (MYFILE);<br>
$~ = "MYFORMAT";<br>
write;<br>
當select改變缺省文件變量時,它返回當前缺省文件變量的內部表示,這樣我們就可以創建子程序,按自己的想法輸出,又不影響程序的其它部分,如下:<br>
<blockquote>
sub write_to_stdout {<br>
local ($savefile, $saveformat);<br>
$savefile = select(STDOUT);<br>
$saveformat = $~;<br>
$~ = "MYFORMAT";<br>
write;<br>
$~ = $saveformat;<br>
select($savefile);<br>
}
</blockquote>
<a name="5">五、分頁</a><br>
在輸出到打印機時,可以在每頁頂部輸出相應的信息,這樣的特殊文本叫頁眉。定義頁眉實際上就是定義名為filename_TOP的打印格式,例如給標準輸出文件定義頁眉如下:<br>
format STDOUT_TOP =<br>
Consolidated Widgets Inc. 1994 Annual Report<br>
.<br>
在頁眉的定義中也可以包含值域,頁眉中經常使用的一個特殊值是當前頁碼,存貯在系統變量$%中,如:<br>
format STDOUT_TOP =<br>
Page @<<.<br>
$%<br>
.<br>
我們也可以通過改變系統變量$^改變定義頁眉的打印格式名,與$~一樣,$^只對當前缺省文件起作用,因此可以與select函數結合使用。<br>
缺省情況下,每頁長度為60行,可以通過改變$=來改變頁長,如:<br>
$= = 66; #頁長設為66行<br>
此賦值語句必須出現在第一個write語句前。<br>
注:一般使用分頁機制時不用print函數,因為當用write輸出時,Perl解釋器跟蹤每頁的當前行號。如果必須使用print而又不打亂頁計數,可以調整系統變量$-。$-的含義是當前行到頁末之間的行數,當$-達到零時,就開始新的一頁,調整方法如:<br>
print ("Here is a line of output\n");<br>
$- -= 1;<br>
<a name="6">六、格式化長字符串</a><br>
我們已經學過值域@*可以輸出多行文本,但它完全將字符串原樣輸出,不加以格式化。在Perl中對長字符串(包含換行)進行格式化的值域定義很簡單,只需把打頭的@字符換成^就行了,這種文本格式化中,Perl解釋器在一行中放置盡可能多的單詞。每當輸出一行文本,被輸出的子串就從變量中刪除,再次在域值中使用該變量就把剩下的字符串繼續按格式輸出。當內容已輸出完畢,該變量就成了空串,再輸出就會輸出空行,為避免輸出空行,可以在值域格式行首加一個~字符。見下例:<br>
<blockquote>
1 : #!/usr/local/bin/perl<br>
2 : <br>
3 : @quotation = <STDIN>;<br>
4 : $quotation = join("", @quotation);<br>
5 : $~ = "QUOTATION";<br>
6 : write;<br>
7 : <br>
8 : format QUOTATION =<br>
9 : Quotation for the day:<br>
10: -----------------------------<br>
11: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<br>
12: $quotation<br>
13: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<br>
14: $quotation<br>
15: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<br>
16: $quotation<br>
17: -----------------------------<br>
18: .
</blockquote>
運行結果如下:<br>
<blockquote>
$ program<br>
Any sufficiently advanced programming<br>
language is indistinguishable from magic.<br>
^D<br>
Quotation for the day:<br>
-----------------------------<br>
Any sufficiently advanced programming language is <br>
indistinguishable from magic. <br>
-----------------------------<br>
$
</blockquote>
如果把打印格式中行首的~字符去掉,上面的輸出結果中就會多一行空行。很明顯,當字符串長度不明確時,這種用法很不方便,原因就在于它指明了輸出的行數上限,超過這一上限的字符就不會被輸出,解決方法很簡單,就是在域值格式行首加兩個~字符,這樣就會持續按格式輸出文本直到輸出完畢,用此方法把上述程序改寫如下:<br>
<blockquote>
1 : #!/usr/local/bin/perl<br>
2 : <br>
3 : @quotation = <STDIN>;<br>
4 : $quotation = join("", @quotation);<br>
5 : $~ = "QUOTATION";<br>
6 : write;<br>
7 : <br>
8 : format QUOTATION =<br>
9 : Quotation for the day:<br>
10: -----------------------------<br>
11: ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<br>
12: $quotation<br>
13: -----------------------------<br>
14: .
</blockquote>
這樣運行結果相同。<br>
<a name="7">七、用printf格式化輸出</a><br>
還有一種容易掌握和使用的格式化輸出函數,那就是printf,它與C語言中的printf基本上是相同的。printf有兩個參數,一個是字符串,其中含有一個或多個域值形式,另一個是與各域值相對應的變量值按一定格式替換,如:<br>
printf("The number I want to print is %d.\n", $number);<br>
各種域值形式如下表:<br>
<p align="center">
<table border="1">
<tr>
<td>域值 </td>
<td>含義</td>
</tr>
<tr>
<td>%c</td>
<td>單個字符</td>
</tr>
<tr>
<td>%d</td>
<td>十進制整數</td>
</tr>
<tr>
<td>%e</td>
<td>科學計數法形式的浮點數 </td>
</tr>
<tr>
<td>%f</td>
<td>普通形式(定點)浮點數</td>
</tr>
<tr>
<td>%g</td>
<td>緊縮形式浮點數</td>
</tr>
<tr>
<td>%o</td>
<td>八進制整數</td>
</tr>
<tr>
<td>%s</td>
<td>字符串</td>
</tr>
<tr>
<td>%u</td>
<td>無符號整數</td>
</tr>
<tr>
<td>%x</td>
<td>十六進制整數</td>
</tr>
</table></p>
一些使用細節如下:<br>
<blockquote>
1、在格式d、o、u或x中,如果整數值較大或可能較大,可加個l字符,意為長整型,如%ld。<br>
2、%字符后加正整數表示該域的最小寬度,如果輸出結果寬度不足,則向右對齊,前面用空格補足,如果該正整數以數字0打頭,則補足字符為0。若%字符后為負整數,則結果向右對齊。<br>
3、浮點數域值(%c、%f和%g)中可以指定小數點前后的寬度,如%8.3f意為總寬度為8個字符,小數點后(即小數部分)為3個字符,多出的小數部分四舍五入。<br>
4、在整數、字符或字符串的值域中使用如上的小數形式n.m,整數部分n為總寬度,小數部分m為輸出結果的最大寬度,這樣就保證了輸出結果前至少有n-m個空格。
</blockquote>
<br>
<p align="center"><a href="perl9.htm">上一章</a> <a href="perl11.htm">下一章</a> <a href="index.htm">目錄</a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -