如何使用Perl Tie :: File在文件的开头插入一行?

时间:2010-05-21 23:47:04

标签: perl

如果找不到/ 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; 

3 个答案:

答案 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)

关键在于使一件事表现得像另一件事。由于您将文件绑定到数组,因此它现在就像一个数组。您可以使用数组运算符执行您需要执行的操作。