perl使用format定义输出模板,使用write按照模板输出。

1、format 格式

format需要定义格式名称,格式行,数据行与结束符号“.”,格式如下:

format FormatName = # 定义格式名称

fieldline # 格式行,用来定义一个输出行的格式,类似 @,^,<,>,| 这样的字符。

value_one, value_two, value_three # 数据行,用来向前面的格式行中插入值,都是perl的变量。

fieldline

value_one, value_two

.

举例如下:

#!/usr/bin/perl

$text = "google it taobao";

format STDOUT =

first: ^<<<<< # 左边对齐,字符长度为6

$text

second: ^<<<<< # 左边对齐,字符长度为6

$text

third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断

$text

.

write

运行结果如下:

$perl main.pl

first: google # 左边对齐,字符长度为6

second: it # 左边对齐,字符长度为6

third: taoba # 左边对齐,字符长度为5,taobao 最后一个 o 被截断

2、格式行

格式行以@或者^开头,只定义格式不适用变量。

@ 字段(不要同数组符号 @ 相混淆)是普通的字段。

@,^ 后的 <, >,| 长度决定了字段的长度,如果变量超出定义的长度,那么它将被截断。

<, >,| 还分别表示,左对齐,右对齐,居中对齐。

^ 字段用于多行文本块填充。

举例如下:

#!/usr/bin/perl

format EMPLOYEE =

===================================

@<<<<<<<<<<<<<<<<<<<<<< @<<

$name, $age

@#####.##

$salary

===================================

.

select(STDOUT);

$~ = EMPLOYEE;

@n = ("Ali", "it", "Jaffer");

@a = (20,30, 40);

@s = (2000.00, 2500.00, 4000.000);

$i = 0;

foreach (@n){

$name = $_;

$age = $a[$i];

$salary = $s[$i++]; ## $i++意思是执行完之后$i再加1

write;

}

运行结果如下:

$perl main.pl

===================================

Ali 20

2000.00

===================================

===================================

it 30

2500.00

===================================

===================================

Jaffer 40

4000.00

===================================

3、格式变量

$~ ($FORMAT_NAME) :格式名字

$^ ($FORMAT_TOP_NAME) :表头格式名字

$% ($FORMAT_PAGE_NUMBER) :页号

$= ($FORMAT_LINES_PER_PAGE):每页中的行数

$| ($FORMAT_AUTOFLUSH) :是否自动刷新输出缓冲区存储

举例如下:

#!/usr/bin/perl

format EMPLOYEE =

===================================

@<<<<<<<<<<<<<<<<<<<<<< @##.##

$name, $age

@#####.## ## 格式行,采用整数5位,小数2位的输出格式

$salary

===================================

. ## 结束符.

# 添加分页 $%

format EMPLOYEE_TOP =

===================================

Name Age Page @< ## 格式行,左对齐

$% ## 数据行,输出页号

===================================

.

$~ = EMPLOYEE; ## 使用格式EMPLOYEE做报表

$^ = EMPLOYEE_TOP; ## 使用格式EMPLOYEE_TOP做表头

@n = ("Ali", "it", "Jaffer");

@a = (20,30, 40);

@s = (2000.00, 2500.00, 4000.000);

$i = 0;

foreach (@n){

$name = $_;

$age = $a[$i];

$salary = $s[$i++];

write;

}

运行结果如下:

$perl main.pl

===================================

Name Age Page 1

===================================

===================================

Ali 20

2000.00

===================================

===================================

it 30

2500.00

===================================

===================================

Jaffer 40

4000.00

===================================

4、输出到其它文件

默认情况下函数write将结果输出到标准输出文件STDOUT,我们也可以使它将结果输出到任意其它的文件中。最简单的方法就是把文件变量作为参数传递给write,如:

write(MYFILE);

使用select指定文件名,write后面就不需要选择文件名。

示例如下:

#!/usr/bin/perl

if (open(MYFILE, ">>tmp")) {

select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中

$~ = "OTHER";

write; # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER

format OTHER =

=================================

使用定义的格式输入到文件中

=================================

.

close MYFILE;

}

运行结果如下:

$ cat tmp

=================================

输入到文件中

=================================

=================================

使用定义的格式输入到文件中

=================================

如果不使用select,那么format的格式名就需要与文件名相同。上面示例就要改成:

#!/usr/bin/perl

if (open(MYFILE, ">>tmp")) {

$~ = "OTHER"; ## 这里的$~没有作用,因为write的文件变量名MYFILE与

## format的格式名相同

write(MYFILE);

format MYFILE =

=================================

使用定义的格式输入到文件中

=================================

.

close MYFILE;

}

 

 

 

 

 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: