2

この前に、配列 @a_nam に値を設定するコードがあります。ここで、配列 @a_nam の要素を、abc.txt の下に示す行の末尾に追加します。私は何かを試しましたが、うまくいきません。入力してください。編集:「+>>」を試しましたが、うまくいきませんでした。

## 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);
4

2 に答える 2

4

追加するためにファイルを開きます

open my $file, '>>'

しかし、あなたはファイルから読み込もうとします

while (<$file>)

これは不可能です。ファイルを読み取り用に開き、別のファイルに書き込みます。最後に、古いファイルの名前をバックアップに変更し、新しいファイルの名前を元のファイルに変更します。

于 2013-05-31T21:54:08.173 に答える
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
于 2013-05-31T22:06:02.127 に答える