增加perl脚本的内存?

时间:2014-04-10 20:38:25

标签: perl replace

我有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 $_;
}

1 个答案:

答案 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;
}