You say: "to avoid using a loop in the code". You should understand there IS a loop here although disguised. It is a mistake to equate number of source code lines with performance. Sometimes more lines are "faster". In this case the grep will loop through all of the lines and report its result at the end.

If performance is a concern and the hash is "large", some more wordy code could wind up being significantly faster on average because it can "give up" when a match is found.

Update: oh, another point... $_->{date} =~ /^$search$/ That says that the date must exactly match the search, from beginning to end. Using "eq" is faster because it doesn't involve the regex engine. "eq" is a stupid, but a very fast critter. It will also "give up" at the first character position that mismatches.

#!/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;

In reply to Re: Searching with grep by Marshall
in thread Searching with grep by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.