It depends on what you want the search to do:
-
if you want to find all matches, use the built-in grep:
my @matches = grep { /pattern/ } @list_of_strings; -
if you want to find the first match, use
firstin List::Util:use List::Util 'first'; my $match = first { /pattern/ } @list_of_strings; -
if you want to find the count of all matches, use
truein List::MoreUtils:use List::MoreUtils 'true'; my $count = true { /pattern/ } @list_of_strings; -
if you want to know the index of the first match, use
first_indexin List::MoreUtils:use List::MoreUtils 'first_index'; my $index = first_index { /pattern/ } @list_of_strings; -
if you want to simply know if there was a match, but you don’t care which element it was or its value, use
anyin List::Util:use List::Util 1.33 'any'; my $match_found = any { /pattern/ } @list_of_strings;
All these examples do similar things at their core, but their implementations have been heavily optimized to be fast, and will be faster than any pure-perl implementation that you might write yourself with grep, map or a for loop.
Note that the algorithm for doing the looping is a separate issue than performing the individual matches. To match a string case-insensitively, you can simply use the i flag in the pattern: /pattern/i. You should definitely read through perldoc perlre if you have not previously done so.