1: my %addresses; 2: 3: open ADDRESSES, 'addresses.dat' or die "Cannot open addresses.dat: $!\n"; 4: while () { 5: next if /^#/; 6: my ($short, $name, $str, $email, $books) = split(/\s*\|/, $_, 5); 7: $addresses{$short} = { 8: Name => $name, 9: Str => $str, 10: EMail => $email 11: }; 12: $books =~ tr/()//d; 13: push @{$addresses{$short}->{Books}}, split /\|/, $books; 14: } 15: close ADDRESSES;