Похоже, вы неправильно поняли несколько вещей.
my @mm = grep{$searchname} @names;
Функция grep()
принимает два аргумента.Блок кода ({ $searchname }
) и список значений (@names
).Для каждого значения в списке оно помещает значение в $_
и выполняет блок кода.Если блок кода возвращает истинное значение, то содержимое $_
добавляется в список вывода.
Ваш блок кода игнорирует $_
и просто проверяет значение $searchname
.Скорее всего, это всегда будет так, поэтому все значения из @names
копируются в @mm
.
Я думаю, что более вероятно, что вы захотите:
my @mm = grep{ $_ eq $searchname } @names;
Во-вторыхВы неожиданно начинаете использовать новую переменную с именем $mm
.Я подозреваю, что вы путаетесь между @mm
и $mm
, которые являются абсолютно разными переменными, не связанными друг с другом.
Я думаю, что вы на самом деле пытаетесь сделать, это посмотреть на первый элементиз @mm
так что вы хотите:
if ($mm[0] eq $searchname)
Но, учитывая, что значения заканчиваются в @mm
, только если они равны $searchname
(потому что это то, что делает ваш grep()
), я думаюВы действительно просто хотите проверить, закончилось ли что-либо в @mm
.Поэтому вы должны использовать:
if (@mm)
Что, на мой взгляд, легче понять.