如果找不到/ PATTERN /,我正试图在文件的beginnig处插入/添加一行'COMMENT DUMMY'作为第一行。 我知道如何使用OPEN CLOSE功能执行此操作。可能在阅读文件后,它看起来应该是这样的:
open F, ">", $fn or die "could not open file: $!"; ;
print F "COMMENT DUMMY\n", @array;
close F;
但是我需要使用Tie :: File函数来实现它,并且不知道如何。
use strict;
use warnings;
use Tie::File;
my $fn = 'test.txt';
tie my @lines, 'Tie::File', $fn or die "could not tie file: $!";
untie @lines;
答案 0 :(得分:2)
unshift
有效:
use Tie::File;
my $fn = 'test.txt';
tie my @lines, 'Tie::File', $fn or die "could not tie file: $!";
unshift @lines, "COMMENT DUMMY\n";
untie @lines;
答案 1 :(得分:1)
Kinopiko's指出了正确的方向。为了满足您的需求,我将执行以下操作:
use strict;
use warnings;
use Tie::File;
my $fileName = 'test.txt';
tie my @lines, 'Tie::File', $fileName or die "Unable to tie $fileName: $!";
unshift @lines, "DUMMY COMMENT\n" if grep { /PATTERN/ } @lines;
untie @lines;
if
语句是在unshift
语句之后写的,但它会先被评估。grep
时,请将其视为列表过滤器。基本上,它会使用您的@lines
列表并使用它创建一个新列表,其中只包含与/PATTERN/
匹配的元素。if
语句的计算结果为true;如果列表为空,则{false}计算结果为false。基于此,"DUMMY COMMENT\n"
行会添加到您的@lines
列表中。答案 2 :(得分:1)
关键在于使一件事表现得像另一件事。由于您将文件绑定到数组,因此它现在就像一个数组。您可以使用数组运算符执行您需要执行的操作。