在perl中的一行末尾追加一个数组

时间:2013-05-31 21:38:46

标签: perl

我之前有更多代码填充数组@a_nam。现在我想在abc.txt中显示的行末尾的数组@a_nam中追加元素。我试了一下,但它不起作用。请提供您的意见。 编辑:我试过“+>>”哪个没用。

## NAME_id , course, Fall 10 ,spring 11, ........

open my $file, '+>>', 'abc.txt' or die "failed : $!";
while (<$file>) {
    chomp;
    if (/^## NAME(.*)/) {
       print  $file join ",", @a_nam;
    }   
}
close($file);

2 个答案:

答案 0 :(得分:4)

您打开文件以追加

open my $file, '>>'

但是你试着从文件中读取

while (<$file>)

这是不可能的。打开文件进行读取并写入另一个文件。最后,将旧文件重命名为备份,将新文件重命名为原始文件。

答案 1 :(得分:3)

使用Tie::File

的简单示例

我不会重复@choroba,因为他已经解释了为什么你的例子不起作用。

<强>已更新即可。它现在将array附加到行的末尾,而不是删除它。

use warnings;
use strict;
use Tie::File;
my @a_nam = qw(append some stuff);
my $match = "## NAME";

tie my @lines, 'Tie::File', "abc.txt" or die "failed: $!";

for my $line (@lines){
    if( $line =~ /^($match.*)/ ) {
        $line = $1 . ", " . join ', ', @a_nam;
    }
}
untie @lines;

之前的文件:

1 blah blah
2 ## NAME, foo, bar, baz
3 whatever lines here

文件后:

1 blah blah
2 ## NAME, foo, bar, baz, append, some, stuff
3 whatever lines here