2014-04-10 33 views
-2

我有這個Perl的腳本,基本上是從查找文件中讀取,但是當我運行它似乎不起作用,但與小輸入文件,但大的,它返回其他carachteres。增加perl腳本的內存?

如果在等同詞中,我有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

怎麼辦你的意思是當你用大文件運行時,它會「返回其他字符」?你怎麼知道你的內存不足? – ThisSuitIsBlackNot

+0

我想,因爲當我運行小輸入文件,它的工作原理。其他字符作爲亞洲語言,也不在等同文件中指定。 – alex

+0

如果你的程序內存不足,那不是你會得到的行爲。您是如何驗證散列內容與輸入文件中的內容不匹配的? – ThisSuitIsBlackNot

回答

0

雖然我理解你想要做的就是增加可用內存爲您的程序,這樣就可以適應大文件的東西,你可能要考慮找不把整個文件到內存的替代如果你想操作大文件。下面的模塊將演示如何在Perl的大型文件,而無需使用額外的內存:

https://metacpan.org/pod/Tie::File

你也許可以開始以這種方式您的腳本中使用它:

use Tie::File; 
tie @lookup, 'Tie::File', 'equivalents.txt' or die [email protected]; 

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