三、在打印格式中顯示值 我們使用打印格式的主要原因當(dāng)然是格式化存貯在簡單變量或數(shù)組變量中的值從而生成可讀性好的輸出,這一目的用“值域”來實(shí)現(xiàn)。每個值域指定一個值,如變量或表達(dá)式,調(diào)用write函數(shù)時,該值就以值域指定的格式顯示。 1、通用的打印格式 打印格式的一個缺點(diǎn)是定義中包含了變量名,例如:
format MYFORMAT = ========================================================== The winning number is @<<<<< $winnum ========================================================== . 當(dāng)調(diào)用write輸出此格式時,必須記著它使用了變量$winnum。用子程序和局域變量就可以創(chuàng)建更通用的打印格式。下例從STDIN輸入一個文件并輸出五個出現(xiàn)頻率最高的字母及出現(xiàn)次數(shù)。
1 : #!/usr/local/bin/perl 2 : 3 : while ($line = ) { 4 : $line =~ tr/A-Z/a-z/; 5 : $line =~ s/[^a-z]//g; 6 : @letters = split(//, $line); 7 : foreach $letter (@letters) { 8 : $lettercount{$letter} += 1; 9 : } 10: } 11: 12: $~ = "WRITEHEADER"; 13: write; 14: $count = 0; 15: foreach $letter (reverse sort occurrences 16: (keys(%lettercount))) { 17: &write_letter($letter, $lettercount{$letter}); 18: last if (++$count == 5); 19: } 20: 21: sub occurrences { 22: $lettercount{$a} <=> $lettercount{$b}; 23: } 24: sub write_letter { 25: local($letter, $value) = @_; 26: 27: $~ = "WRITELETTER"; 28: write; 29: } 30: format WRITEHEADER = 31: The five most frequently occurring letters are: 32: . 33: format WRITELETTER = 34: @: @<<<<<< 35: $letter, $value 36: . 運(yùn)行結(jié)果如下:
$ program This is a test file. This test file contains some input. The quick brown fox jumped over the lazy dog. ^D The five most frequently occurring letters are: t: 10 e: 9 i: 8 s: 7 o: 6 $
|