我有perl的这个脚本,基本上是从查找文件中读取,但是当我运行它似乎不起作用,但适用于小输入文件,但大的,它返回其他carachteres。
如果在等价物中我有单词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 $_;
}
答案 0 :(得分:0)
虽然我明白你想要做的是增加你的程序的可用内存,以便你可以适应大文件,你可能想考虑寻找一个没有把整个文件放入内存的替代方案,如果你想要操作大文件。以下模块将演示如何在不使用额外内存的情况下处理Perl中的大型文件:
https://metacpan.org/pod/Tie::File
您可以以这种方式开始在脚本中使用它:
use Tie::File;
tie @lookup, 'Tie::File', 'equivalents.txt' or die $@;
while (@lookup) {
chomp;
my ($k, $v) = split /\s*=\s*/;
$h{$k} = $v;
}