1

对于我的程序,我试图用新创建的值替换外部文件中特定哈希的值。外部文件的值是从键中以制表符分隔的,我已经从外部文件中读取了哈希值。我一直在网上四处寻找,这是我能弄清楚如何做的最接近的方法,但它似乎不起作用。

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

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

4

4 回答 4

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;
于 2008-12-18T22:09:54.587 回答
1

http://www.sthomas.net/roberts-perl-tutorial.htm/ch13/Modifying_a_File_with___
我在“$INPLACE_EDIT perl”上搜索

于 2011-01-07T21:36:27.010 回答
0

您正在尝试读取和写入同一个文件,这是行不通的。您必须阅读,替换然后写入另一个文件。之后,如果您真的想要一个文件,您可以将输入文件替换为您刚刚编写的文件。

于 2008-12-18T22:04:26.097 回答
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 人。

于 2008-12-18T22:06:15.330 回答