增加perl脚本的内存?
我有一个perl脚本,基本上是从一个查找文件中读取的,但是当我运行它时,它似乎不起作用,但是可以处理小的输入文件,但是大的输入文件,它会返回其他carachtere 如果在等价物中我有单词Dog=can,如果我有一个带有单词Dog的输入文件,它会被翻译成can 如何提高运行1gb输入文件的内存容量增加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"
#!/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,“