perl学习笔记11 z

52 篇文章 0 订阅

1.  创建格式化报告

一个格式的声明是以关键字format开始的,采用如下形式:

              format    formatName=

              text

              .

其中格式定义的“text”部分由3种类型的行组成:注释行、描述行和行参数。

Ø         注释行:是以一个“#”开头,并且在按格式打印时将被忽略。

Ø         描述行:则指定了格式的内容,其中包含常规文本和格式字段。常规文本就是按原样打印,而不需要作任何修改。格式字段为将要按格式输出的值指定的占位符。以一个@^开始的字段,其后紧跟格式说明符,它指明字段的长度以及如何对齐。

Ø         参数行:制定了替代前面描述行中所述的字段的内容。一个参数行包含了一个以逗号分隔的列表。

perl中,用write函数发起格式调用。默认的格式将使用特殊的文件句柄,而且格式的名字与此文件句柄相同。如为了使用STDOUT,指定其为使用默认格式,并且需要将这个格式命名为STDOUT

 

紧跟@后面的字符内容指定了字段的格式对齐类型。“<”字符指定字段格式的左对齐类型。“>”字符指定字段格式的右对齐类型。“|”字符指定字段格式的居中对齐类型。字段的所有字符(包括@在内)指明了字段的宽度。若声明的格式字段由于宽度不够而不能容纳其值时,将导致其值被截掉。

 

使用格式时,请注意:对格式中使用的任何变量,它必须处在格式声明的作用域内。因此,要想在一个格式中使用my变量,那么必须在这些变量定义之后,而且在变量超出作用域之前,声明这个格式。一个子程序使用格式时,必须在该子程序内部声明这个变量,或者使用全局变量。

 

2.  页面顶部处理

Perl可以判断在特殊变量“$=($FORMAT_LINES_PER_PAGE)中存储的是什么内容。每次在输出内容的开始部分时,都是输出每页的行数,并执行页眉部分。默认的页眉格式是由write函数来触发的,并且这个默认的页眉格式的名字就是当前文件句柄及在后面添加的_TOP所形成的。

 

按小数点对齐方式使用#符号,格式如下:

              @####.##

 

页顶处理是由write函数自动完成的。Write函数将查看$-变量(也就是$FORMAT_LINE_LEFT变量,这个变量指定了在当前页中所余留的所有行数。),并判断在当前页中是否还有足够的空间来满足输出的需求。如果没有足够的空间,write函数将输出特殊变量$^L的值,这个变量默认为换页字符“/f”,但也可以改变为任意字串内容。换页字符“/f”表示将开始新的一页。接下来所要输出的是页眉格式。

 

Perl不自动提供页面底部格式,如果需要页脚可以使用如下方法。

²        减少每页的页脚部分的行数,并将页脚的文本内容放到$^L变量中。因为$^L变量将在一个新的页面开始之前输出,所以该变量文本内容将显示在前一页的底部。

²        如果页脚比较复杂,则需要监控$-变量的值,并在这个变量达到正确值时,执行必要的处理任务。

 

3.  多行格式字段

多行字段使用“^”字符定义,它告诉perl以字为单位打印该字段所能容纳的最多内容,若该字段余下的长度不足以打印下一个字,则不在给字段中打印这个字并将余下部分留空。格式在下次引用该变量时,将从变量中这个字开始输出。

不过,这个风格的格式将会导致write函数改变这个变量的值。如果需要在调用write函数后再使用这个值,则在调用write函数前,使用一个临时变量存储这个值。

 

在可能输出为空的行中使用“~”字符,当行的内容为空的时候,他们将被压缩。

在格式的最后部分可以使用“”字符,表示实际内容将长于显示的内容,这三个圆点只有在内容溢出时才被显示。

如果不想限制输出的行数,则可以在最后一行放置“~~,表示该行将按所指定的格式重复,直到内容全部输出完成。

 

对这一段内容不太理解

利用多行字段,perl可以以字为单位(边界),在某些特定字符后,将文本内容分离到不同的行中。这些字符存储在特殊变量$: ( $FORMAT_LINE_BREAK_CHARACTERS变量) [F1]  ,变量值可以被改变。默认的,$:变量包含一个空格,一个横线和一个开始新行的字符

 

另一个灵活性较差的多行输出方式是使用“@*”字段。这个字段可以将一个变量的内容分离成多个行,并输出这个变量的全部内容。这个“@*”字段最适合以自身单独成为一行的情况。在这一行中,“@*”之前的任何文本或字段都将被输出一次,并不会因为溢出而被重复。“@*”字段将这个变量中的内容分离为等长的几行,而不考虑在该行中的其他文本的内容,所以如果在“@*”字段前有文本内容,则将导致该行结尾与其他行不一致。在“@*”字段后不应放置文本内容,否则将导致不可预期的结果。

@*”字段可以识别“/n”和“/t”字符,并将打印出对应的结果,而“^”字段将“/n”和“/t”打印成空格。

 

4.  格式变量

Perl提供了一个模块,允许使用更符合逻辑的名字来替代这些内置变量:即“use English”实用化命名方法,它允许实用替代名。这些特殊变量都是每个文件句柄所特有的。若要访问的是某个文件句柄的这些变量,而不是当前的,则使用“select”函数选择这个句柄。

 

名字

Use English名字

说明

默认值

$~

$FORMAT_NAME

当前格式名

STDOUT

$^

$FORMAT_TOP_NAME

当前页眉

STDOUT_TOP

$%

$FORMAT_PAGE_NUMBER

当前页号

0

$=

$FORMAT_LINES_PER_PAGE

每页输出的行数

60

$-

$FORMAT_LINES_LEFT

当前页所余留行数

0

$:

$FORMAT_LINE_BREAK_CHARACTERS

应开始费为多行的字符数

-/n

$^L

$FORMAT_FORMFEED

文本开始输出到新页

/n

$.

$INPUT_LINE_NUMBER

给读取的每一行进行编号

0

  

如果一个多行的写操作超出了一页的范围,则write函数将开始一个新的页面。如果要求每页所打印的行数都必须完全相同,则可以监视$-变量,并做一些额外的处理。如果格式每次都有固定的长度,可以仅检查下一个write操作是否跳过一些行,并在执行格式之前打印出所有必要数目的行。另外,确保换页格式变量$^L对每个余留德航总是包含一个新行,当完全不知道下一个write是否需要一个新的页面时,这种方法比较有效。按这种方式,当换页时,程序将填充那些被跳过的行。

 

当格式发生变化的时候,write函数并没有以打印的页眉作为开始,而输出的是“This is a sample text file.”。想要强制输出页眉格式,可设置余留行格式变量($-)为0

 

使用$-变量时,print 语句不会自动递减$-变量的值。只有在使用write函数时才会递减。如果使用print,并希望$-的值能递减,只能自己递减这个变量。

           

 


 [F1]这一段的内容不太理解!!!


<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值