#!/usr/bin/perl my $myfile = 'somefile'; my %by_id = (); my %by_name = (); open (IN, '<', $myfile) or die "Can't open $myfile: $!\n"; sub ID () {0} sub NAME () {1} sub STREET () {2} sub CITY () {3} sub ZIP () {4} sub PHONE () {5} sub START_DT () {6} while () { my @f = split /\|/o; $by_id{$f[ID]} = \@f; $by_name{$f[NAME]} = \@f; # etc for other indexes you want } my $id = 'fred'; if (exists $by_id{$id}) { print "$id's Address is ", $by_id{$id}->[ADDRESS], "\n"; } else { print "I've never heard of this $id guy.\n"; }