http://qs1969.pair.com?node_id=766719


in reply to Why is my program so slow even though I've used hashes?

Thanks very much for all your comments so far. With that in mind, I changed some of my code as follows
foreach my $key (sort keys %csa_hash) { #print "$key\n"; # ok we now need to split up the key in the hash my $pdb = substr($key, 0, 4); my $chain = substr($key, 5, 1); my $res = substr($key, 7, 6); #print "$pdb $chain $res\n"; # works great. using substring as I d +ont really want to create an array my $pdbchain = "$pdb" . "$chain"; # concatenate together so to com +pare with domain data # print "$pdbchain\n"; # works fine # lets be on the safe side and remove white space # for domchain and pdbchain $res =~ s/\s//g; #$domchain =~ s/\s//g; $pdbchain =~ s/\s//g; #chomp($domchain); chomp($pdbchain); if($dom_hash{$pdbchain}{$res}) { print "$pdbchain $res\n"; } }
And now it runs in seconds. I'm no longer looping over %dom_hash, I'm simply using it as a look up table.