Как мне заменить значения хэша во внешнем файле?

StackOverflow https://stackoverflow.com/questions/379465

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Галстук::Файл могу исправить это за вас.

use Tie::File;

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

for (@array) {
    s/$hash{$key}/$newvalue/;
}
untie @array;

Другие советы

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

Это не будет эффективно, но это должно сработать, если только мой 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top