#!/usr/bin/perl use strict; use warnings; my $data = [ { 'date' => '20160101', 'day' => 'Friday' }, { 'date' => '20160215', 'day' => 'Monday' }, { 'date' => '20160530', 'day' => 'Monday' }, { 'date' => '20160704', 'day' => 'MOnday' }, { 'date' => '20160905', 'day' => 'Monday' }, { 'date' => '20161010', 'day' => 'Monday' }, { 'date' => '20161124', 'day' => 'Thursday' }, { 'date' => '20161125', 'day' => 'Friday' }, { 'date' => '20161226', 'day' => 'Monday' }, { 'date' => '20170102', 'day' => 'Monday' } ]; my $search = "20161010"; #[choroba] solution....and a good one! #my $result = ( grep $_->{date} =~ /^$search$/, @$data ) ? 'Found' : 'Not Found'; #Another way as a demo using "last" my $found; foreach my $ref (@$data) { if ($ref->{date} eq $search) { $found++; print "Found $search\n"; last; ## stops the foreach loop after "found" } } print "Not Found: $search \n" if !$found;