in reply to hash problem

First, I think you might have an error in the code you submitted. I assume that

$names{$refnum} = $str;
should be
$names{$ref} = $str;
Second, the reason the code is dying is because on the last line,  $names{$number} does not exist.

It might be a good idea to take a look at what $names is actually holding after the loop. A good way to see that is to use Data::Dumper

#!/usr/bin/perl use Data::Dumper; %names; { open(name, "<data/gly.txt"); while(<name>) { ($ref, $str) = split /\|/; $names{$ref} = $str; } } print Dumper(%names);
This will help you track down the problem.