明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Perl教學 第10篇 格式化輸出之4

[摘要]六、格式化長字符串我們已經(jīng)學過值域@*可以輸出多行文本,但它完全將字符串原樣輸出,不加以格式化。在Perl中對長字符串(包含換行)進行格式化的值域定義很簡單,只需把打頭的@字符換成^就行了,這種文本格式化中,Perl解釋器在一行中放置盡可能多的單詞。每當輸出一行文本,被輸出的子串就從變量中刪除,再...
六、格式化長字符串
我們已經(jīng)學過值域@*可以輸出多行文本,但它完全將字符串原樣輸出,不加以格式化。在Perl中對長字符串(包含換行)進行格式化的值域定義很簡單,只需把打頭的@字符換成^就行了,這種文本格式化中,Perl解釋器在一行中放置盡可能多的單詞。每當輸出一行文本,被輸出的子串就從變量中刪除,再次在域值中使用該變量就把剩下的字符串繼續(xù)按格式輸出。當內(nèi)容已輸出完畢,該變量就成了空串,再輸出就會輸出空行,為避免輸出空行,可以在值域格式行首加一個~字符。見下例:

1 : #!/usr/local/bin/perl
2 :
3 : @quotation = ;
4 : $quotation = join("", @quotation);
5 : $~ = "QUOTATION";
6 : write;
7 :
8 : format QUOTATION =
9 : Quotation for the day:
10: -----------------------------
11: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
12: $quotation
13: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
14: $quotation
15: ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
16: $quotation
17: -----------------------------
18: .
運行結(jié)果如下:

$ program
Any sufficiently advanced programming
language is indistinguishable from magic.
^D
Quotation for the day:
-----------------------------
Any sufficiently advanced programming language is
indistinguishable from magic.
-----------------------------
$
如果把打印格式中行首的~字符去掉,上面的輸出結(jié)果中就會多一行空行。很明顯,當字符串長度不明確時,這種用法很不方便,原因就在于它指明了輸出的行數(shù)上限,超過這一上限的字符就不會被輸出,解決方法很簡單,就是在域值格式行首加兩個~字符,這樣就會持續(xù)按格式輸出文本直到輸出完畢,用此方法把上述程序改寫如下:

1 : #!/usr/local/bin/perl
2 :
3 : @quotation = ;
4 : $quotation = join("", @quotation);
5 : $~ = "QUOTATION";
6 : write;
7 :
8 : format QUOTATION =
9 : Quotation for the day:
10: -----------------------------
11: ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
12: $quotation
13: -----------------------------
14: .
這樣運行結(jié)果相同。
七、用printf格式化輸出
還有一種容易掌握和使用的格式化輸出函數(shù),那就是printf,它與C語言中的printf基本上是相同的。printf有兩個參數(shù),一個是字符串,其中含有一個或多個域值形式,另一個是與各域值相對應(yīng)的變量值按一定格式替換,如:
printf("The number I want to print is %d.\n", $number);
各種域值形式如下表:

域值 含義
%c 單個字符
%d 十進制整數(shù)
%e 科學計數(shù)法形式的浮點數(shù)
%f 普通形式(定點)浮點數(shù)
%g 緊縮形式浮點數(shù)
%o 八進制整數(shù)
%s 字符串
%u 無符號整數(shù)
% 十六進制整數(shù)

一些使用細節(jié)如下:

1、在格式d、o、u或x中,如果整數(shù)值較大或可能較大,可加個l字符,意為長整型,如%ld。
2、%字符后加正整數(shù)表示該域的最小寬度,如果輸出結(jié)果寬度不足,則向右對齊,前面用空格補足,如果該正整數(shù)以數(shù)字0打頭,則補足字符為0。若%字符后為負整數(shù),則結(jié)果向右對齊。
3、浮點數(shù)域值(%c、%f和%g)中可以指定小數(shù)點前后的寬度,如%8.3f意為總寬度為8個字符,小數(shù)點后(即小數(shù)部分)為3個字符,多出的小數(shù)部分四舍五入。
4、在整數(shù)、字符或字符串的值域中使用如上的小數(shù)形式n.m,整數(shù)部分n為總寬度,小數(shù)部分m為輸出結(jié)果的最大寬度,這樣就保證了輸出結(jié)果前至少有n-m個空格。