Frage

Für mein Programm, bin ich versuche, den Wert eines bestimmten Hash in einer externen Datei mit einem neu erstellten Wert zu ersetzen. Die externe Datei hat den Wert aus dem Schlüssel Tabula begrenzt, und ich hatte den Hash in der externen Datei lesen. Ich habe Online-Suche um, und dies ist der nächste Weg ich heraus könnte, wie es zu tun, aber es scheint nicht zu funktionieren.

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

Ich bin nicht ganz sicher, was ich in dieser Formel bin fehle.

War es hilfreich?

Lösung

Tie :: File kann dies für Sie beheben.

use Tie::File;

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

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

Andere Tipps

Sie versuchen, auf die gleiche Datei zu lesen und schreiben, das wird nicht funktionieren. Sie müssen lesen, ersetzt dann in einer anderen Datei schreiben. Danach können Sie die Eingabedatei durch das ersetzen haben Sie gerade geschrieben, wenn Sie wirklich eine Datei möchten.

Dies wird nicht effizient sein, aber es sollte funktionieren, es sei denn, mein Perl-fu ist schlecht:

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");

Es könnte ein Befehl sein, den Schritt für Sie in Perl zu tun, aber ich bin nicht ein Perl-Typ.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top