При поиске строки в массиве вы можете просто использовать eq
вместо регулярного выражения:
grep { $_ eq $new_href } @m_href_array
Однако, если вам действительно нужно использовать регулярное выражение (например, вы ищете строку, соответствующую подстроке в массиве, вы должны всегда заключать в кавычки строку, чтобы встроенные специальные символы в Ваша строка не имеет нежелательных эффектов:
grep { /\Q$substr\Esomething_else/ } @array
Более того, если все, что вас волнует, - это значение, где-то , вы можете замкнуть накоротко, как только найдете совпадение:
use List::Util 'first';
if (first { $_ eq $new_href } @m_href_array) { ... }
или
use List::MoreUtils 'any';
if (any { $_ eq $new_href } @m_href_array) { ... }
Если вы собираетесь выполнять много поисков или ваш массив очень длинный, вы можете еще быстрее ускорить процесс, преобразовав массив в хеш, поэтому у вас будет O (1) поиск:
my %values_index;
@values_index{@array} = ();
if (exists $values_index{$element}) { ... }