首页 > 编程语言 >无涯教程-Perl - format函数

无涯教程-Perl - format函数

时间:2023-08-08 16:34:48浏览次数:40  
标签:------------------------ STDOUT format 无涯 Perl EMPLOYEE 格式

如前所述,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特殊变量部分。

参考链接

https://www.learnfk.com/perl/perl-format.html

标签:------------------------,STDOUT,format,无涯,Perl,EMPLOYEE,格式
From: https://blog.51cto.com/u_14033984/7010091

相关文章

  • 无涯教程-Perl - exp函数
    描述此函数将e(自然对数底数)返回到EXPR的幂。如果省略EXPR,则给出exp($_)。语法以下是此函数的简单语法-expEXPRexp返回值此函数不返回任何值。参考链接https://www.learnfk.com/perl/perl-exp.html......
  • perl字符串转义以及字符串含.号等特殊符号时的用法
    Perl中的单引号字符串不支持转义字符,双引号字符串支持转义字符如下双引号中的\t \x \r \n是有作用的 单引号中的无作用$cattest_stresc.pl#!/usr/bin/perlusewarnings;usestrict;my$str_sq='1Aa\t\x31\x41\x61\t\x{263a}\r\n';my$str_dq="1Aa\t\x31\x41\x......
  • [论文阅读] Neural Transformation Fields for Arbitrary-Styled Font Generation
    Pretitle:NeuralTransformationFieldsforArbitrary-StyledFontGenerationaccepted:CVPR2023paper:https://openaccess.thecvf.com/content/CVPR2023/html/Fu_Neural_Transformation_Fields_for_Arbitrary-Styled_Font_Generation_CVPR_2023_paper.htmlcode:htt......
  • 无涯教程-Perl - endnetent函数
    描述此功能告诉系统您不再希望使用getnetent从网络列表中读取条目。语法以下是此函数的简单语法-endnetent返回值此函数不返回任何值。例以下是显示其基本用法的示例代码-#!/usr/bin/perluseSocket;while(($name,$aliases,$addrtype,$net)=getnetent())......
  • 无涯教程-Perl - endhostent函数
    描述此函数告诉系统您不再希望使用gethostent从hosts文件读取条目。语法以下是此函数的简单语法-endhostent返回值此函数不返回任何值。例以下是显示其基本用法的示例代码-#!/usr/bin/perlwhile(($name,$aliases,$addrtype,$length,@addrs)=gethostent()){......
  • 无涯教程-Perl - dump函数
    描述此函数将当前正在执行的Perl解释器和脚本转储到核心转储中。使用undump程序,然后可以将转储的内核重新构造为可执行程序。执行新的二进制文件时,将从执行gotoLABEL开始。如果省略了LABEL,则从顶部重新启动程序。如果要使用转储来提高程序速度,请考虑按照perlcc中的描述生......
  • 无涯教程-Perl - dbmopen函数
    描述此函数将EXPR指定的数据库文件绑定到哈希HASH。如果数据库不存在,则使用MODE指定的模式创建数据库。文件EXPR的扩展名应不含.dir和.pag。现在不赞成使用领带,而是使用领带DBM哈希模块之一,例如SDBM_File。语法以下是此函数的简单语法-dbmopenHASH,EXPR,MOD......
  • 无涯教程-Perl - continue函数
    描述此函数是流控制语句,而不是函数。如果在块上附加了一个连续块(通常在while或foreach中),则它总是在条件将要再次求值之前执行,就像C中for循环的第三部分一样。因此,即使通过next语句继续执行循环,也可以使用它来增加循环变量。最后,下一个或重做可能会出现在继续块中。......
  • 无涯教程-Perl - closedir函数
    描述此功能关闭目录句柄DIRHANDLE。语法以下是此函数的简单语法-closedirDIRHANDLE返回值如果失败,此函数返回0,如果成功,则返回1。例以下是显示其基本用法的示例代码-#!/usr/bin/perl-w$dirname="/tmp";opendir(DIR,$dirname)||die"Errorinopeningd......
  • 无涯教程-Perl - chroot函数
    描述此函数的工作方式类似于具有相同名称的系统调用:它使命名目录成为您的进程及其所有子级以/开头的所有其他路径名的新根目录。出于安全原因,该功能与系统chroot()功能相同,仅限于超级用户且无法撤消。如果省略了FILENAME,则对$_执行chroot语法以下是此函数的简单语法-ch......