| |
|
| |
 |
|
perl教学 第十篇 格式化输出之三
|
|
| 日期:2005-7-18 8:46:10 来源:易特网络技术 编辑:黑鹰 点击: |
2、格式和局域变量 在上例中,你可能已经注意到子程序write_letter调用write输出字母及其出现次数,即使格式定义在子程序外部仍能正常工作。在第17行中将字母及其出现次数传递给该子程序,在子程序中,打印格式使用局域变量$letter和$value,这样保证了在foreach循环中每次输出当前的字母和值。 然而要注意的是,使用my定义的局域变量要求格式定义在子程序内部,否则就不会输出,因此,用write输出的局域变量一定要用local定义。(local和my详见《子程序》一章) 注:perl4中没有my函数,故不会有此问题。 3、选择值域格式 我们已经知道了打印格式和write函数怎么工作,现在来看看值域的格式,见下表:
格式 值域含义 @<<< 左对齐输出 @>>> 右对齐输出 @||| 中对齐输出 @##.## 固定精度数字 @* 多行文本
每个值域的第一个字符是行填充符,当使用@字符时,不做文本格式化。对文本的格式化稍后来讲。 在上表中,除了多行值域@*,域宽都等于其指定的包含字符@在内的字符个数,例如: @###.## 表示七个字符宽,小数点前四个,小数点后两个。 4、输出值域字符 在打印格式里,特定字符如@、<和>被看作值域定义,那么如何将它们输出呢?方法如下:
format special = this line contains the special character @. "@" . 四、输出到其它文件 缺省地,函数write将结果输出到标准输出文件stdout,我们也可以使它将结果输出到任意其它的文件中。最简单的方法就是把文件变量作为参数传递给write,如: write (myfile); 这样,write就用缺省的名为myfile的打印格式输出到文件myfile中,但是这样就不能用$~变量来改变所使用的打印格式。系统变量$~只对缺省文件变量起作用,我们可以改变缺省文件变量,改变$~,再调用write,例如: select (myfile); $~ = "myformat"; write; 当select改变缺省文件变量时,它返回当前缺省文件变量的内部表示,这样我们就可以创建子程序,按自己的想法输出,又不影响程序的其它部分,如下:
sub write_to_stdout { local ($savefile, $saveformat); $savefile = select(stdout); $saveformat = $~; $~ = "myformat"; write; $~ = $saveformat; select($savefile); } 五、分页 在输出到打印机时,可以在每页顶部输出相应的信息,这样的特殊文本叫页眉。定义页眉实际上就是定义名为filename_top的打印格式,例如给标准输出文件定义页眉如下: format stdout_top = consolidated widgets inc. 1994 annual report . 在页眉的定义中也可以包含值域,页眉中经常使用的一个特殊值是当前页码,存贮在系统变量$%中,如: format stdout_top = page @<<. $% . 我们也可以通过改变系统变量$^改变定义页眉的打印格式名,与$~一样,$^只对当前缺省文件起作用,因此可以与select函数结合使用。 缺省情况下,每页长度为60行,可以通过改变$=来改变页长,如: $= = 66; #页长设为66行 此赋值语句必须出现在第一个write语句前。 注:一般使用分页机制时不用print函数,因为当用write输出时,perl解释器跟踪每页的当前行号。如果必须使用print而又不打乱页计数,可以调整系统变量$-。$-的含义是当前行到页末之间的行数,当$-达到零时,就开始新的一页,调整方法如: print ("here is a line of output\n"); $- -= 1;
|
上一篇:perl教学 第十篇 格式化输出之四
下一篇:perl教学 第十篇 格式化输出之二
[发送给好友] [打印本页] [关闭窗口] [返回顶部] 转载请注明来源:http://www.iyit.net |
|
| 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 责任编辑: 黑鹰 |
投稿作者: 易特网络 |
| 信息来源: 易特网络技术 |
录入时间: 2005-7-18 8:46:10 |
| 浏览次数: |
投稿信箱: shtghy@163.com |
|
|
|
|