Perl在追加模式下打开文件句柄以读取
我有一个文本文件,我必须在其中读取内容并附加到它。i、 e.复制文件并附加到其中。我编写了以下代码Perl在追加模式下打开文件句柄以读取,perl,Perl,我有一个文本文件,我必须在其中读取内容并附加到它。i、 e.复制文件并附加到其中。我编写了以下代码 #!/usr/bin/perl use strict; use warnings; my $line; open FILL, ">> fred" or warn "Cannot open : $!"; while(<FILL>){ # s/^Author:.*/Author: Randal L. Schwartz/; # s/^Phone:.*\n//;
#!/usr/bin/perl
use strict;
use warnings;
my $line;
open FILL, ">> fred"
or warn "Cannot open : $!";
while(<FILL>){
# s/^Author:.*/Author: Randal L. Schwartz/;
# s/^Phone:.*\n//;
# s/^Date:.*/Date: $date/;
$line.=$_;
print $line;
}
select FILL;
print $line;
输出:
Program name: granite
Author: Gilbert Bates
Company: RockSoft
Department: R&D
Phone: +1 503 555-0095
Date: Tues March 9, 2004
Version: 2.1
Size: 21k
Status: Final beta
Program name: granite
Author: Gilbert Bates
Company: RockSoft
Department: R&D
Phone: +1 503 555-0095
Date: Tues March 9, 2004
Version: 2.1
Size: 21k
Status: Final beta
这个程序工作正常
#!/usr/bin/perl
use strict;
use warnings;
my $line;
open FIL, "fred"
or warn "Cannot open : $!";
open FILL, ">> fred"
or warn "Cannot open : $!";
while(<FIL>){
# s/^Author:.*/Author: Randal L. Schwartz/;
# s/^Phone:.*\n//;
# s/^Date:.*/Date: $date/;
$line.=$_;
print $line;
}
select FILL;
print $line;
为什么要打印这么多次?
$line
是一个变量,您可以在其中累积到目前为止读取的所有内容。所以在循环中,你可能想
print $_;
或者只是
print;
而不是
print $line;
要回答您最初的问题。。。您需要以读写(追加)模式打开文件
(请不要使用双参数版本的open
。这不安全。)
但这会将文件指针放在文件的末尾,因此您必须执行以下操作:
seek FILL, 0, 0;
在阅读之前。由于您是在写入之前读取的,因此无论您是否以追加模式打开文件,都没有区别
open FILL, '>>+', 'fred';
您甚至可以在读取文件后添加另一个
seek
,但我不确定这是否可以跨Unix和Windows移植。谢谢,我收到了。但是我也想在附加模式下使用filehandle进行读取。如果我在append模式下读取文件句柄,它根本不会进入@hillu+>
的循环并查找文件的开头。
open FILL, '>>+', 'fred';
seek FILL, 0, 0;