增加perl脚本的内存?

增加perl脚本的内存?,perl,replace,Perl,Replace,我有一个perl脚本,基本上是从一个查找文件中读取的,但是当我运行它时,它似乎不起作用,但是可以处理小的输入文件,但是大的输入文件,它会返回其他carachtere 如果在等价物中我有单词Dog=can,如果我有一个带有单词Dog的输入文件,它会被翻译成can 如何提高运行1gb输入文件的内存容量 #!/usr/bin/perl use strict; use warnings; use autodie; open my $LOOKUP , "<" , "equivalents.txt"

我有一个perl脚本,基本上是从一个查找文件中读取的,但是当我运行它时,它似乎不起作用,但是可以处理小的输入文件,但是大的输入文件,它会返回其他carachtere

如果在等价物中我有单词Dog=can,如果我有一个带有单词Dog的输入文件,它会被翻译成can

如何提高运行1gb输入文件的内存容量

#!/usr/bin/perl
use strict;
use warnings;
use autodie;

open my $LOOKUP , "<" , "equivalents.txt";
open my $LIST   , "<" , "input-text.txt";
open my $OUTPUT , ">" , "output.txt";

my %h;

while (<$LOOKUP>) {
    chomp;
    my ($k, $v) = split /\s*=\s*/;
    $h{$k} = $v;
}

while (<$LIST>) {
    s/([a-zA-Z0-9]+)/$h{$1} || "[$1]"/eg;
    print $OUTPUT $_;
}
#/usr/bin/perl
严格使用;
使用警告;
使用自动模具;

打开我的$LOOKUP,“虽然我理解你想要做的是增加你的程序的可用内存,这样你就可以适应大文件,你可能想考虑寻找一个替代方案,如果你想在大文件上运行的话,它不会把整个文件放到内存中。以下模块将演示如何在不使用额外内存的情况下使用Perl处理大型文件:

您可以通过以下方式开始在脚本中使用它:

use Tie::File;
tie @lookup, 'Tie::File', 'equivalents.txt' or die $@;

while (@lookup) {
    chomp;
    my ($k, $v) = split /\s*=\s*/;
    $h{$k} = $v;
}

当你运行大文件时,你说它“返回其他字符”是什么意思?你怎么知道你的内存已经用完了?我猜,因为当我运行小的输入文件时,它会工作。其他字符为亚洲语言,也不是等效文件中指定的字符。如果进程内存不足,则不会出现这种情况。您是如何验证散列的内容与输入文件中的内容不匹配的?有没有办法知道它?我不是程序员,有人在堆栈中为我编写了该脚本,但由于无法向他发送私人消息,我需要询问其他人。谢谢,顺便问一下,你知道怎么解决吗?“返回其他字符”听起来像是编码问题,而不是内存问题。你知道用亚洲语言字符对文件进行编码吗?当你找到答案时,用这种编码打开你的输入和输出文件,例如,
打开我的$LIST,“