in reply to Re^4: Optimize my code with Hashes
in thread Optimize my code with Hashes

Sorry if my answer sounded too harsh, I'm not a native english speaker myself

The part of the code you show seems to be quite efficient and from what I can see the author of this code knows how to program in perl. I even tried out the program (the bit you posted) on my machine and it needed just over 1 second (3 seconds on a sun blade 100) to init the hash with 50000 bogus entries and run the loop over it. Naturally with empty subroutines, so no surprise really.

What you don't show is what createEDentry and updateEDentry do. Probably that is where most of the work is done.

If you want to try yourself, here is my test code. Run it on your machine, if it takes less than 20 seconds, the problem is not in the code you have shown us.

my %used_dn=(); my %en2dn=(); my %ed_en; my %pfinfo=(); my $i=50000; while ($i>0) { $pfinfo{$i--}= "$i|Henion,David|A|Active|010474|HAWKEY,Michael G|S +C3789"; } my $log=0; $i=0; foreach my $en (keys %pfinfo) { logAndSkip(\*LOG,"Considering the entry from PeopleFirst extract: $e +n...") if ($log); # Get the PF information my @pfi=(); #reset the array @pfi=split/\|/,$pfinfo{$en}; # If employee number does not exists in ED, it looks like a creation if (!exists $ed_en{$en}) { createEDentry(\*LOG,\@pfi,\%used_dn,\%en2dn); } # Looks like an ED entry update else { updateEDentry(\*LOG,$en2dn{$en},\@pfi,\%en2dn); } } # End Foreach sub LogAndSkip {} sub createEDentry { my ($LOG,$pfi,$used,$en)=@_; } sub updateEDentry { my ($LOG,$pfi,$en)=@_; }