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.

Foi útil?

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top