in reply to Balancing Complexities of Data Structures, Code and Readability

Just to expand on dragonchild's comment, I'd be inclined to create a package for each kind of account, with a "new" method to create a blessed object from the data in the original text file. Each $accounts{ssn} would contain an anonymous array of these objects. Creating %accounts might be done as follows:
while (<>) { my($ssn, $obj) = parse_account($_); push @{$accounts{$ssn}}, $obj; }
parse_account() of course would have to be able to determine the account type that the string defines, then call the appropriate account-object constructor. Each individual account-type package would provide a standard set of methods to access account information. E.g. to print out all the email addresses you'd implement a method called "email" within each package; it could be called like this:
while (my($ssn, $acctlist) = each %accounts) { foreach my $acct (@$acctlist) { print $ssn, $acct->email, "\n"; } }
A simple, individual "email" method would just look like:
sub email { my $self = shift; return $self->{'email'}; }
If you wanted to get fancy, all of the individual account-type packages could inherit from a more generic package; this would let you avoid having to create all these duplicate trivial methods.