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 个字符空格内写为左对齐,之后将写在两个空格内。


调用格式写入数据

为了调用此格式声明,我们将使用 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
   ------------------------
   .

Now your report will look like

   ------------------------
   Name                 Age
   ------------------------
   Kirsten              12
   Mohammad             35
   Suhi                 15
   Namrat               10

定义分页和页面上的行数

如果您的报告超过一页怎么办? 有一个解决方案。 使用 $% 变量和 header 如下

   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 特殊变量部分。

❮ Perl 函数参考