use strict; use warnings; use Data::Dumper; use JSON; my $json = <<'JSON'; { "People" : [ { "name" : "bob", "title" : "janitor", "email" : "taco@blah.com", "iq" : "180", "favorite_food" : "wagyu steak" }, { "name" : "joe", "title" : "software engineer", "email" : "", "iq" : "80", "favorite_food" : "raw hamburger" }, { "name" : "sandy", "title" : "dishwasher", "email" : "", "iq" : "240", "favorite_food" : "tacos" }, { "name" : "george", "title" : "software engineer", "email" : "", "iq" : "14", "favorite_food" : "tacos" } ] } JSON my $j = JSON->new->decode($json); my @results2 = grep { $_->{email} =~ /taco/ or $_->{favorite_food} =~ /taco/ } @{ $j->{People} }; print Dumper \@results2;