{ my %n; my %c; my %a; sub addrecord ($$$) { my ($n,$c,$a) = @_; my $r = [$n,$c,$a]; push @$n{$n},$r; push @$c{$c},$r; push @$a{$a},$r; } sub getbyname($) { my $n = shift; return @$n{$n}; } sub getbycat($) { my $c = shift; return @$c{$c}; } sub getbyaddress($) { my $a = shift; return @$a{$a}; } }