Как заменить значения хеша во внешнем файле? - PullRequest
1 голос
/ 19 декабря 2008

В моей программе я пытаюсь заменить значение определенного хэша во внешнем файле вновь созданным значением. Внешний файл имеет значение табуляции, разделенное ключом, и я прочитал хэш из внешнего файла. Я искал в Интернете, и это самый близкий способ, которым я мог понять, как это сделать, но, похоже, это не сработало.

            open(IN, ">>$file") || die "can't read file $file";
            while (<IN>) {
            print IN s/$hash{$key}/$newvalue/;
            }
           close (IN) 

Я не совсем уверен, чего мне не хватает в этой формуле.

Ответы [ 4 ]

4 голосов
/ 19 декабря 2008

Tie :: File может исправить это за вас.

use Tie::File;

tie @array, 'Tie::File', $file or die "Could not tie $file: $!";

for (@array) {
    s/$hash{$key}/$newvalue/;
}
untie @array;
1 голос
/ 08 января 2011
0 голосов
/ 19 декабря 2008

Это не будет эффективно, но должно работать, если мой perl-fu не плох:

open(IN, "<<$file") || die "can't read file $file";
open(OUT, ">>${file}.tmp") || die "can't open file $file";
while (<IN>) {
    print OUT s/$hash{$key}/$newvalue/;
}
close(IN);
close(OUT);
exec("mv ${file}.tmp $file");

Может быть, есть команда сделать для вас ход в Perl, но я не Perl парень.

0 голосов
/ 19 декабря 2008

Вы пытаетесь читать и писать в один и тот же файл, который не будет работать. Вы должны прочитать, заменить, а затем написать в другом файле. После этого вы можете заменить входной файл тем, который вы только что написали, если вам действительно нужен один файл.

...