Perl格式化输出概念详解

本文和大家重点讨论一下Perl格式化输出的概念,我们已经见过用print函数将原始的未格式化的文本输出到文件,本章讲述如何用函数write和打印格式来生成Perl格式化输出。

Perl格式化输出

我们已经见过用print函数将原始的未格式化的文本输出到文件,本章讲述如何用函数write和打印格式来生成格式化的输出。

一、Perl格式化输出之定义打印格式

定义打印格式的关键字为format,语法为:

formatformatname=
lines_of_output

◆打印格式名formatname的命名规则与一般变量相同。结束行为一个句号,此行不能有任何其它字符,包括空格,句号必须是该行第一个字符。
打印格式的定义象子程序一样可以放在任何地方,甚至可以放在条件语句中,但是最好把它们集中放在程序的开头或结尾。

二、Perl格式化输出之显示打印格式

打印格式的显示有两步:
1、将系统变量$~设成所要使用的格式
2、调用函数write
例如:

 
 
 
  1. 1:#!/usr/local/bin/perl  
  2. 2:  
  3. 3:$~="MYFORMAT";  
  4. 4:write;  
  5. 5:  
  6. 6:formatMYFORMAT=  
  7. 7:===================================  
  8. 8:HereisthetextIwanttodisplay.  
  9. 9:===================================  
  10. 10:.  

结果输出如下:

$program
===================================
HereisthetextIwanttodisplay.
===================================
$
如果不用$~指定打印格式,Perl解释器就假定要使用的格式名与要写入的文件变量同名,在本例中,如果不指定使用MYFORMAT,则Perl解释器试图使用名为STDOUT的打印格式。

三、Perl格式化输出之在打印格式中显示值

我们使用打印格式的主要原因当然是格式化存贮在简单变量或数组变量中的值从而生成可读性好的输出,这一目的用“值域”来实现。每个值域指定一个值,如变量或表达式,调用write函数时,该值就以值域指定的格式显示。

1、通用的打印格式

打印格式的一个缺点是定义中包含了变量名,例如:

formatMYFORMAT=
==========================================================
Thewinningnumberis@<<<<< $winnum
==========================================================

◆当调用write输出此格式时,必须记着它使用了变量$winnum。用子程序和局域变量就可以创建更通用的打印格式。

2、Perl格式化输出之格式和局域变量

在上例中,你可能已经注意到子程序write_letter调用write输出字母及其出现次数,即使格式定义在子程序外部仍能正常工作。在第17行中将字母及其出现次数传递给该子程序,在子程序中,打印格式使用局域变量$letter和$value,这样保证了在foreach循环中每次输出当前的字母和值。
然而要注意的是,使用my定义的局域变量要求格式定义在子程序内部,否则就不会输出,因此,用write输出的局域变量一定要用local定义。(local和my详见《子程序》一章)
注:Perl4中没有my函数,故不会有此问题。

3、选择值域格式

我们已经知道了打印格式和write函数怎么工作,现在来看看值域的格式,见下表:

每个值域的第一个字符是行填充符,当使用@字符时,不做文本格式化。对文本的格式化稍后来讲。
在上表中,除了多行值域@*,域宽都等于其指定的包含字符@在内的字符个数,例如:
@###.##
表示七个字符宽,小数点前四个,小数点后两个。

4、输出值域字符

在打印格式里,特定字符如@、<和>被看作值域定义,那么如何将它们输出呢?方法如下:

formatSPECIAL=
Thislinecontainsthespecialcharacter@.
"@"

【编辑推荐】

  1. 全面认识Perl格式化输出用法
  2. Perl文件句柄概念详解
  3. 实例解析Perl守护进程用法
  4. Perl学习笔记----Perl格式化输出详解
  5. 术语汇编 Perl变量中Perl关联数组用法解析

本文标题:Perl格式化输出概念详解
文章出自:http://www.shufengxianlan.com/qtweb/news1/368351.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联