in reply to slow parser how to make it faster
First, split takes a regular expression, not a string (except sometimes ;-). So splitting on '\t' won't give the expected results. Next, I suspect that @id_list grows fairly long over time, and you are iterating over the entire array with grep. A hash is more suitable here:
use strict; use warnings; my $name = ''; my %id_list; open (STDIN,"perl first_program.pl|") || die "$!"; open (OUT, ">", "out.txt") || die "$!"; while(my $line_in =<STDIN>){ chomp($line_in); my @line_array = split(/\t/,$line_in); my @subline_array = split(/\|/, $line_array[1]); unless ($name eq $line_array[0]) { %id_list = (); $name = $line_array[0]; } next if $id_list{$subline_array[3]}++; print OUT "$line_in\n"; }
If you experience memory shortage, tie the hash %id_list to a disk file via e.g. DB_File.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: slow parser how to make it faster
by ig (Vicar) on Jun 11, 2009 at 08:39 UTC |