如前所述,Perl代表实用提取和报告语言,我们现在将讨论使用Perl编写报告。
Perl使用称为"格式"的书写模板来输出报告。要使用Perl的格式功能,您必须-
- 定义格式
- Pass the data that will be displayed on the format
- Invoke the Format
定义格式
以下是定义Perl格式的语法
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
FormatName
表示格式的名称。字段线是应格式化数据的特定方式。值行表示将输入到字段行中的值。您用一个句点结束格式。
fieldline
可以包含任何文本或字段持有人。字段持有人保留了以后将放置在此处的数据的空间。字段持有人的格式为-
@<<<<
This fieldholder is left-justified, with a field space of 5. You must count the @sign and the < signs to know the number of spaces in the field. Other field holders include
@>>>> right-justified @|||| centered @####.## numeric field holder @* multiline field holder
一个示例格式是-
format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== .
在此示例中,$name将在22个字符的空间内写为左对齐,而在该年龄之后,将在两个空间内写。
调用格式以写入数据
为了调用此格式声明,我们将使用write关键字-
write EMPLOYEE; #send to the output
问题在于格式名称通常是打开的文件句柄的名称,而write语句会将输出发送到该文件句柄。由于我们希望将数据发送到STDOUT,因此必须将EMPLOYEE与STDOUT文件句柄相关联。但是,首先,我们必须使用select()函数确保STDOUT是我们选择的文件句柄
select(STDOUT);
然后,通过使用特殊变量$〜通过STDOUT设置新格式名称,将EMPLOYEE与STDOUT关联
$~="EMPLOYEE";
现在,当我们执行write()时,数据将被发送到STDOUT。请记住:如果您没有将STDOUT设置为默认文件句柄,则可以通过将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
Defining a Pagination & Number of Lines on a Page
如果您的报告占用一页以上,该怎么办?您有解决方案。使用 $%
变量和标题,如下所示
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特殊变量部分。