因为关闭并重新打开
MODULE
手柄不复位
$-
(
$FORMAT_LINES_LEFT
具有
use English;
)跟踪当前页中还剩多少行的变量。如果每次用新文件重新打开文件句柄时都将该变量重置为0,则会使格式重置为新页。文件上不清楚,但你
产科加强生命支持
必须重新-
select
执行此操作之前的文件句柄。重复使用文件句柄是一个棘手的问题;使用自动激活的句柄而不是裸露的句柄是很好的风格之一(尽管这并不能避免您不得不使用
选择
使用格式时)。
#!/usr/bin/perl
use warnings;
use strict;
use autodie;
our $file;
format FOO_TOP =
Header line
-----------
.
format FOO =
Body of @<<<<<<
$file
.
for $file ("a.txt", "b.txt") {
open FOO, ">", $file;
my $oldfd = select FOO;
$- = 0;
select $oldfd;
write FOO;
close FOO;
}
上面的循环可以用更现代的风格来写,比如:
for $file ("a.txt", "b.txt") {
open my $foo, ">", $file;
my $oldfd = select $foo;
$^ = "FOO_TOP";
$~ = "FOO";
select $oldfd;
write $foo;
close $foo;
}
另一种更清晰的方法是使用
IO::Handle
模块:
for $file ("a.txt", "b.txt") {
open FOO, ">", $file;
format_lines_left FOO 0;
write FOO;
close FOO;
}
或
for $file ("a.txt", "b.txt") {
open my $foo, ">", $file;
$foo->format_name("FOO");
$foo->format_top_name("FOO_TOP");
write $foo;
close $foo;
}
哪个做的
选择
为你包装。