📜  Perl 中的格式

📅  最后修改于: 2022-05-13 01:55:43.717000             🧑  作者: Mango

Perl 中的格式

格式是 Perl 中用于输出报告的书写模板。 Perl 有一种机制可以帮助生成简单的报告和图表。 Formats 不是执行,而是声明,因此它们可能出现在程序中的任何位置。除了 Perl 中的其他类型,格式有自己的命名空间,即名为“tron”的函数与名为“tron”的格式不同。但是,程序中文件句柄的名称是与该文件句柄关联的格式的默认名称。

定义格式

定义 Perl 格式的语法:

format FormatName =
fieldline
value_1, value_2, value_3
fieldline
value_1, value_2, value_3
.

– 格式的名称由FormatName 表示。
Fieldline是一种用于格式化数据的特殊方式。 Fieldline 也可以包含文本或字段持有者。
值线表示/描述将输入到字段线中的值。
– 格式以单个句点 (.)结束
字段持有者有空间用于稍后输入的数据。

字段持有者的语法:

@<<<<<<<       left-justified (with 7 field spaces by counting '@' and '<')
@|||||||       center-justified
@###.####      numeric fieldholder
@*             multiline fieldholder

使用格式

Write关键字用于调用格式声明。

Write FormatName;

格式名称是打开的文件句柄的名称,写语句将输出发送到相同的文件句柄。为了将数据发送到STDOUT ,格式名称需要与 STDOUT 文件句柄相关联。
注意:使用select()函数确保 STDOUT 是选定的文件句柄。

select (STDOUT);

为了通过使用 STDOUT 设置新格式名称来将格式名称与 STDOUT 相关联,请使用$~$Format_Name等变量

$~ = "Format_Name";

注意:要在除 STDOUT 之外的任何其他文件句柄中写入报告,请使用select()函数来选择该文件句柄。

例子:
输入:使用标准输出。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
   
@First_Name = qw(Karthik Raman Shivam Tarun);
@Last_Name = qw(Singh Biswas Anand Mishra);
@ID = qw(101 186 009 359);
@Phone_Number = qw(963x 885x 734x 921x);
   
format DATA = 
@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<
$First_Name[$k] $Last_Name[$k]  $ID[$k]         $Phone_Number[$k]
   
.
   
select(STDOUT);
$~ = DATA;
$k = 0;
while ($k <= $#First_Name)
{
    write;
    $k++;
}

输出 :

输入:使用其他文件句柄(将输出打印到文本文件中。)

#!/usr/bin/perl
  
print "Content-type: text/html\n\n";
  
  
@First_Name = qw(Karthik Raman Shivam Tarun);
@Last_Name = qw(Singh Biswas Anand Mishra);
@ID = qw(101 186 009 359);
@Phone_Number = qw(963x 885x 734x 921x);
  
  
format DATA = 
@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<
$First_Name[$k] $Last_Name[$k]  $ID[$k]         $Phone_Number[$k]
  
.
  
open(FILE, ">file.txt");
select FILE;
$~ = DATA;
  
$k = 0;
while ($k <= $#First_Name)
{
    write;
    $k++;
}
  
close FILE;

输出 :

打印数据的文件:

报表页眉和页脚

页眉是出现在每一页顶部的东西。无需定义模板,只需定义标题并将其分配给$^$FORMAT_NAME_TOP
页脚具有固定大小。它可以通过检查变量$-来实现。如有必要,您甚至可以使用下面给出的语法自行打印页脚,

format FORMAT_NAME_BOTTOM
End of Page $%

例子:
输入:使用标准输出

#!/usr/bin/perl
print "Content-type: text/html\n\n";
   
format DATA_TOP = 
@||||||||||||||||||||||||||||||||||||||||||||||||||||
                  "Staff Members"
               ----------------------
First           Last            ID              Phone
------------------------------------------------------
.
   
@First_Name = qw(Karthik Raman Shivam Tarun);
@Last_Name = qw(Singh Biswas Anand Mishra);
@ID = qw(101 186 009 359);
@Phone_Number = qw(963x 885x 734x 921x);
   
format DATA = 
@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<
$First_Name[$k] $Last_Name[$k]  $ID[$k]         $Phone_Number[$k]
   
.
   
select (STDOUT);
$~ = DATA;
$^ = DATA_TOP;
$k = 0;
while ($k <= $#First_Name)
{
    write;
    $k++;
}

输出:

输入:将输出写入文本文件。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
  
format DATA_TOP = 
@||||||||||||||||||||||||||||||||||||||||||||||||||||
                  "Staff Members"
               ----------------------
First           Last            ID              Phone
------------------------------------------------------
.
  
@First_Name = qw(Karthik Raman Shivam Tarun);
@Last_Name = qw(Singh Biswas Anand Mishra);
@ID = qw(101 186 009 359);
@Phone_Number = qw(963x 885x 734x 921x);
  
  
format DATA = 
@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<
$First_Name[$k] $Last_Name[$k]  $ID[$k]         $Phone_Number[$k]
  
.
  
open (FILE, ">file.txt");
select FILE;
$~ = DATA;
$^ = DATA_TOP;
  
$k = 0;
while ($k <= $#First_Name)
{
    write;
    $k++;
}
close FILE;

输出:

打印数据的文件:

分页

当您有一份长长的报告不适合单页时,分页就会出现。使用$%$FORMAT_PAGE_NUMBER等变量以及格式中的标题有助于将页码定义为多页。一页中的默认行数为 60,但也可以使用变量$=$FORMAT_LINES_PER_PAGE手动设置。

例子:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
  
format DATA_TOP = 
@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"[Page $%]"
@||||||||||||||||||||||||||||||||||||||||||||||||||||
                  "Staff Members"
               ----------------------
First           Last            ID              Phone
------------------------------------------------------
.
  
@First_Name = qw(Karthik Raman Shivam Tarun);
@Last_Name = qw(Singh Biswas Anand Mishra);
@ID = qw(101 186 009 359);
@Phone_Number = qw(963x 885x 734x 921x);
  
  
format DATA = 
@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<
$First_Name[$k] $Last_Name[$k]  $ID[$k]         $Phone_Number[$k]
  
.
  
select (STDOUT);
$~ = DATA;
$^ = DATA_TOP;
$= = 1;
  
$k = 0;
while ($k <= $#First_Name)
{
    write;
    $k++;
}

输出: