【发布时间】:2021-10-19 08:03:43
【问题描述】:
我正在尝试删除 a.txt 文件的一部分并替换为 b.txt 文件的内容,同时还使用 Perl 程序对 a.txt 中的其他行进行修改。
文件 a.txt
line1
line2
replace from below line
replace from this line
bla bla...
bla bla...
to this line
line3
line4
文件 b.txt
replacement1
replacement2
replacementn
下面是我的代码,它不起作用。
#!/apps/perl/5.8.3/bin/perl -w
open (INPUT, "a.txt") or die $!;
open (REPLACE, "b.txt") or die $!;
open (OUTPUT, ">c.txt") or die $!;
my $replace_text;
{
local $/;
$replace_text = <REPLACE>;
}
close(REPLACE);
while (<INPUT>) {
s/line1/modified_line1/;
s/line2/modified_line2/;
if($_ =~ /replace from below line/){
while(<INPUT>){
{
local undef $/;
s/replace from this line.*to this line/$replace_text/smg;
}
s/line3/modified_line3/;
s/line4/modified_line4/;
print OUTPUT;
}
}
}
close(INPUT);
close(OUTPUT);
预期的输出文件 c.txt
modified_line1
modified_line2
replacement1
replacement2
replacementn
modified_line3
modified_line4
谁能帮我理解我哪里出错了?
【问题讨论】:
-
open (INPUT, "filename")多年来一直是不好的做法。不要使用原始文件句柄名称。首选open my $f, mode, name。