yes, this is what I talked about in "1)" above. Your hash is permanent, you have to fill it only once, ever. You need two scripts:
This is the script you call once whenever your source file changes:
#!/usr/bin/perl #script 1. Fills the hash use warnings; use strict; use DBM::Deep; my $file_in_en=shift; my %hash_en=to_hash($file_in_en); sub to_hash { my $file = shift; my $db = DBM::Deep->new( "$file.db" ); $db->clear(); open(FILE, "<$file"); foreach $l (<FILE>) { my ($ngram,$line) = split /\t/, $l; push(@{ $db->{$ngram} }, $line); } close FILE; return $db; }
And this is your search script:
#!/usr/bin/perl #script 2. Search item in hash use warnings; use strict; use DBM::Deep; my $file=shift; my $hash_en= DBM::Deep->new( "$file.db" ); print @{$hash_en->{'despite'}};
UDPATE: corrected the search script
In reply to Re^9: search a large text file
by jethro
in thread search a large text file
by perl_lover_always
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |