- Perl 基础
- Perl - 首页
- Perl - 简介
- Perl - 环境
- Perl - 语法概述
- Perl - 数据类型
- Perl - 变量
- Perl - 标量
- Perl - 数组
- Perl - 哈希表
- Perl - IF...ELSE
- Perl - 循环
- Perl - 运算符
- Perl - 日期与时间
- Perl - 子程序
- Perl - 引用
- Perl - 格式
- Perl - 文件 I/O
- Perl - 目录
- Perl - 错误处理
- Perl - 特殊变量
- Perl - 代码规范
- Perl - 正则表达式
- Perl - 发送邮件
- Perl 高级
- Perl - 套接字编程
- Perl - 面向对象
- Perl - 数据库访问
- Perl - CGI 编程
- Perl - 包与模块
- Perl - 进程管理
- Perl - 嵌入式文档
- Perl - 函数引用
- Perl 资源
- Perl - 问答
- Perl - 快速指南
- Perl - 资源
- Perl - 讨论
Perl 格式 - 报告编写
如前所述,Perl 代表实用提取和报告语言 (Practical Extraction and Reporting Language),我们现在将讨论使用 Perl 编写报告。
Perl 使用名为“格式”的编写模板来输出报告。要使用 Perl 的格式功能,您必须:
- 定义格式
- 传递将显示在格式中的数据
- 调用格式
定义格式
以下是定义 Perl 格式的语法
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
FormatName
代表格式的名称。字段行是数据应如何格式化的特定方式。值行代表将输入字段行的值。您用单个句点结束格式。
fieldline
可以包含任何文本或字段占位符。字段占位符保留用于稍后放置数据的空间。字段占位符的格式为:
@<<<<
此字段占位符左对齐,字段空间为 5。您必须计算 @ 符号和 < 符号才能知道字段中的空格数。其他字段占位符包括:
@>>>> right-justified @|||| centered @####.## numeric field holder @* multiline field holder
一个示例格式将是:
format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== .
在这个例子中,$name 将左对齐写入 22 个字符空间内,之后 age 将写入两个空间。
调用格式以写入数据
为了调用此格式声明,我们将使用 write 关键字:
write EMPLOYEE; #send to the output
问题是格式名称通常是打开的文件句柄的名称,write 语句会将输出发送到此文件句柄。由于我们希望数据发送到 STDOUT,我们必须将 EMPLOYEE 与 STDOUT 文件句柄关联。但是,首先我们必须确保 STDOUT 是我们选择的文件句柄,使用 select() 函数
select(STDOUT);
然后,我们将通过使用特殊变量 $~ 将新的格式名称设置为 STDOUT,从而将 EMPLOYEE 与 STDOUT 关联。
$~ = "EMPLOYEE";
当我们现在执行 write() 时,数据将被发送到 STDOUT。记住:如果您没有将 STDOUT 设置为默认文件句柄,您可以通过将 select 的返回值赋给标量值,并在特殊变量赋予格式名称后使用此标量变量一起使用 select 来恢复到原始文件句柄,以与 STDOUT 关联。
上面的例子将生成以下格式的报告
Kirsten 12 Mohammad 35 Suhi 15 Namrat 10
定义报表页眉
一切看起来都很好。但是您可能希望向报表添加页眉。此页眉将打印在每一页的顶部。这样做非常简单。除了定义模板外,您还必须定义一个页眉,其名称相同,但附加了 _TOP 关键字,如下所示
format EMPLOYEE_TOP = ------------------------ Name Age ------------------------ .
现在您的报表将如下所示
------------------------ Name Age ------------------------ Kirsten 12 Mohammad 35 Suhi 15 Namrat 10
定义分页和每页行数
如果您的报表超过一页怎么办?您有解决方法。使用 $%
变量以及页眉,如下所示
format EMPLOYEE_TOP = ------------------------ Name Age Page @< ------------------------ $% .
现在您的输出将如下所示
------------------------ Name Age Page 1 ------------------------ Kirsten 12 Mohammad 35 Suhi 15 Namrat 10
您可以使用特殊变量 $=
(或 $FORMAT_LINES_PER_PAGE)设置每页的行数。默认情况下,$= 为 60。
定义报表页脚
剩下的最后一件事是页脚。与页眉非常相似,您可以定义页脚,它将在每一页之后写入。在这里,您将使用 _BOTTOM 关键字而不是 _TOP。
format EMPLOYEE_BOTTOM = End of Page @< $% .
这将为您提供以下结果
------------------------ Name Age Page 1 ------------------------ Kirsten 12 Mohammad 35 Suhi 15 Namrat 10 End of Page 1
有关与格式相关的完整变量集,请参阅 Perl 特殊变量 部分。