#!/usr/bin/perl
format
EMPLOYEE
=
===================================
$name
,
$age
@
$salary
===================================
select
(
STDOUT
)
;
$~ =
EMPLOYEE
;
@n
=
(
"
Ali
"
,
"
Runoob
"
,
"
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
===================================
===================================
Runoob 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
$~ ($FORMAT_NAME) :格式名字
$^ ($FORMAT_TOP_NAME) :当前的表头格式名字存储在
$% ($FORMAT_PAGE_NUMBER) :当前输出的页号
$= ($FORMAT_LINES_PER_PAGE) :每页中的行数
$| ($FORMAT_AUTOFLUSH) :是否自动刷新输出缓冲区存储
$^L ($FORMAT_FORMFEED) :在每一页(除了第一页)表头之前需要输出的字符串存储在
以下是一个简单是使用 $~ 格式化的实例:
#!/usr/bin/perl
$~ =
"
MYFORMAT
"
;
write
;
format
MYFORMAT
=
=================================
Text
=================================
write
;
=================================
Text # 菜鸟教程
=================================
=================================
Text # 菜鸟教程
=================================
#!/usr/bin/perl
write
;
format
STDOUT
=
~用~号指定的文字不会被输出
----------------
STDOUT
格式
----------------
执行以上实例输出结果为:
----------------
STDOUT格式
----------------
以下实例我们通过添加报表头部信息来演示 $^ 或 $FORMAT_TOP_NAME 变量的使用:
#!/usr/bin/perl
format
EMPLOYEE
=
===================================
$name
,
$age
@
$salary
===================================
format
EMPLOYEE_TOP
=
===================================
Name
Age
===================================
select
(
STDOUT
)
;
$~ =
EMPLOYEE
;
$^
=
EMPLOYEE_TOP
;
@n
=
(
"
Ali
"
,
"
Runoob
"
,
"
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
===================================
===================================
Runoob 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
我们也可以使用 $% 或 $FORMAT_PAGE_NUMBER 为报表设置分页:
#!/usr/bin/perl
format
EMPLOYEE
=
===================================
$name
,
$age
@
$salary
===================================
format
EMPLOYEE_TOP
=
===================================
Name
Age
Page
@<
===================================
select
(
STDOUT
)
;
$~ =
EMPLOYEE
;
$^
=
EMPLOYEE_TOP
;
@n
=
(
"
Ali
"
,
"
Runoob
"
,
"
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 Page 1
===================================
===================================
Ali 20
2000.00
===================================
===================================
Runoob 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
输出到其它文件
默认情况下函数write将结果输出到标准输出文件STDOUT,我们也可以使它将结果输出到任意其它的文件中。最简单的方法就是把文件变量作为参数传递给write,如:
write(MYFILE);
以上代码write就用默认名为MYFILE的打印格式输出到文件MYFILE中。
但是这样就不能用$~变量来改变所使用的打印格式。系统变量$~只对默认文件变量起作用,我们可以改变默认文件变量,改变$~,再调用write。
#!/usr/bin/perl
if
(
open
(
MYFILE
,
"
>tmp
"
)
)
{
$~ =
"
MYFORMAT
"
;
write
MYFILE
;
format
MYFILE
=
=================================
输入到文件中
=================================
close
MYFILE
;
执行成功后,我们可以查看 tmp 文件的内容,如下所示:
$ cat tmp
=================================
输入到文件中
=================================
我们可以使用select改变默认文件变量时,它返回当前默认文件变量的内部表示,这样我们就可以创建子程序,按自己的想法输出,又不影响程序的其它部分。
#!/usr/bin/perl
if
(
open
(
MYFILE
,
"
>>tmp
"
)
)
{
select
(
MYFILE
)
;
$~ =
"
OTHER
"
;
write
;
format
OTHER
=
=================================
使用定义的格式输入到文件中
=================================
close
MYFILE
;
执行成功后,我们可以查看 tmp 文件的内容,如下所示:
$ cat tmp
=================================
输入到文件中
=================================
=================================
使用定义的格式输入到文件中
=================================