如何替换外部文件中的哈希值?

时间:2008-12-18 21:59:47

标签: perl hash substitution

对于我的程序,我试图用新创建的值替换外部文件中特定哈希的值。外部文件具有从键中分隔的值,并且我已从外部文件中读取了哈希值。我一直在网上寻找,这是我能找到怎样做的最接近的方式,但它似乎不起作用。

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

我不太确定我在这个公式中缺少什么。

4 个答案:

答案 0 :(得分:4)

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 :(得分:1)

答案 2 :(得分:0)

您正在尝试读取和写入同一个文件,但这不起作用。你必须阅读,替换然后写入另一个文件。之后,如果你真的想要一个文件,你可以用你刚写的那个替换输入文件。

答案 3 :(得分:0)

这不会有效,但它应该有效,除非我的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家伙。