Como faço para substituir os valores de um hash em um arquivo externo?
-
22-08-2019 - |
Pergunta
Para o meu programa, eu estou tentando substituir o valor de um hash específico em um arquivo externo com um valor recém-criado. O arquivo externo tem o valor guia-delimitado a partir da chave, e eu tinha lido o hash a partir do arquivo externo. Eu estive olhando ao redor em linha, e este é o caminho mais próximo que eu pudesse descobrir como fazê-lo, mas ele não parece trabalho.
open(IN, ">>$file") || die "can't read file $file";
while (<IN>) {
print IN s/$hash{$key}/$newvalue/;
}
close (IN)
Eu não tenho certeza do que eu estou faltando nesta fórmula.
Solução
Tie :: File pode corrigir isso para você.
use Tie::File;
tie @array, 'Tie::File', $file or die "Could not tie $file: $!";
for (@array) {
s/$hash{$key}/$newvalue/;
}
untie @array;
Outras dicas
http://www.sthomas.net/roberts-perl- tutorial.htm / CH13 / Modifying_a_File_with ___ I
google em "$ perl Inplace_Edit"
Você está tentando ler e escrever para o mesmo arquivo, que não está indo para o trabalho. Você tem que ler, substituto em seguida, escrever em outro arquivo. Depois, você pode substituir o arquivo de entrada por aquela que você acabou de escrever se você realmente quer um arquivo.
Isso não vai ser eficiente, mas deve funcionar, a menos que meu perl-fu é ruim:
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");
Pode haver um comando para fazer o movimento para você em perl, mas eu não sou um cara perl.