use strict; my %users = (); my %matches = (); my %search = ( sex => 'F', age => 19, st => 'FL' ); ## load users hash foreach () { chomp; my ($user, $sex, $age, $st) = split /\|/; $users{$user}{sex} = $sex; $users{$user}{age} = $age; $users{$user}{st} = $st; } ## Perform searches foreach my $user (keys %users) { my $match = 1; foreach my $key (keys %search) { $match = 0, last if $users{$user}{$key} ne $search{$key}; } $matches{$user}++ if $match; } ## Print out the matches (if any) foreach (keys %matches) { print "user: '", $_, "' sex: '", $users{$_}{sex}, "' age: '", $users{$_}{age}, "' st: '", $users{$_}{st}, "'\n"; } print "No matches found!\n" if not %matches; __DATA__ JOE|M|18|AL SUE|F|18|MS BOB|M|19|CA EVE|F|20|FL PAM|F|19|FL ABE|M|18|FL NAN|F|19|CA