Perl使用称为“formats”的模板来输出内容。要使用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;
问题在于格式名称通常是打开的文件句柄的名称,而write语句会将输出发送到该文件句柄。由于我们希望将数据发送到STDOUT,因此必须将EMPLOYEE与STDOUT文件句柄相关联。但是,首先,我们必须使用select()函数确保STDOUT是我们选择的文件句柄。
select(STDOUT);
然后,通过使用特殊变量$〜或$FORMAT_NAME来设置STDOUT的新格式名称,将EMPLOYEE与STDOUT关联起来,如下所示-
$~="EMPLOYEE";
现在,当我们执行write时,数据将被发送到STDOUT。记住:如果要用其他文件句柄而不是STDOUT,则可以使用select()函数选择该文件句柄,其余逻辑将保持不变。
让我们来看下面的示例。
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . select(STDOUT); $~=EMPLOYEE; @n=("Ali", "Raza", "Jaffer"); @a =(20,30, 40); @s=(2000.00, 2500.00, 4000.000); $i=0; foreach (@n) { $name=$_; $age=$a[$i]; $salary=$s[$i++]; write; }
执行后,将产生以下输出-
=================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
定义报头
一切看起来都很好。但是您可能会对在报表中添加标题感兴趣。此标题将打印在每页顶部。这很简单。除了定义模板之外,您还必须定义标题并将其分配给$^或$FORMAT_TOP_NAME变量-
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . format EMPLOYEE_TOP = =================================== Name Age =================================== . select(STDOUT); $~=EMPLOYEE; $^=EMPLOYEE_TOP; @n=("Ali", "Raza", "Jaffer"); @a =(20,30, 40); @s=(2000.00, 2500.00, 4000.000); $i=0; foreach (@n) { $name=$_; $age=$a[$i]; $salary=$s[$i++]; write; }
现在您的报告看起来像-
=================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
定义分页
如果您的报告占用一页以上,该怎么办?您有一个解决方案,只需使用或$FORMAT PAGE NUMBER变量以及标头,如下所示:
format EMPLOYEE_TOP = =================================== Name Age Page @< $% =================================== .
现在您的输出将如下所示:
=================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
页面行数
您可以使用特殊变量 $= (或$FORMAT_LINES_PER_PAGE)设置每页的行数,默认情况下$=将为60。
定义页脚
虽然$^或$FORMAT_TOP_NAME包含当前页眉格式的名称,但是没有相应的机制可以自动为页脚执行相同的操作。如果您有固定大小的页脚,则可以通过在每个write之前检查变量$-或$FORMAT_LINES_LEFT来获取页脚,并在必要时使用定义如下的另一种格式自己打印页脚-
format EMPLOYEE_BOTTOM = End of Page @< $% .
有关与格式相关的完整变量集,请参阅Perl特殊变量部分。=">
参考链接
https://www.learnfk.com/perl/perl-formats.html
标签:格式化,STDOUT,句柄,format,FORMAT,无涯,Perl,EMPLOYEE,格式 From: https://blog.51cto.com/u_14033984/6951695