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.