Опираясь на smartmatch раствора @Dilbertino (хороший ник) с помощью match::simple
по @tobyink, чтобы облегчить боль smartmatch уезжает (я пропускаю это уже):
use match::simple;
my @array = qw(abcd.txt abcdeff.txt abcdweff.txt abcdefrgt.txt);
my $x="abcd.txt" ;
say "it's there" if ($x |M| \@array);
|M|
оператор из match::simple
может быть заменен match
функцией, немного ускоряется (реализовано с помощью XS):
use match::simple qw(match);
my @array = qw(abcd.txt abcdeff.txt abcdweff.txt abcdefrgt.txt);
my $x="xyz.txt" ;
if (match ($x, \@array)) {
say "it's there!" ;
}
else {
say "no hay nada";
}
Это «просто», потому что RHS контролирует поведение. С match::simple
, если вы соответствуете массиву на RHS, он должен быть arrayref.
Smart::Match
также имеет функцию none
. Для того, чтобы использовать его, вы должны сделать следующее:
if ($x ~~ none (@array)) {
say "not here so do stuff ...";
}
Приложение
Обсуждение здесь на Stackoverlfow (см: Perl 5.20 and the fate of smart matching and given-when?) и в других местах (срPerlmonks article по @ikegami от около жемчужно-5.18) дает контекст для эксперимента smartmatch. TLDR; вещи могут измениться в будущем, но между тем, вы можете пойти назад во времени и use match::smart qw(match);
с perl-5.8.9 доказать еще раз, что perl никогда не умирает; он просто возвращается к своей экосистеме.
В будущем что-то вроде Smart::Match
(т.е.. Модуль CPAN непрофильного не понятие) может помочь перегружать упрощенный смарт-оператор согласования с вспомогательными функциями, которые считывают как наречия и прилагательных и имеют дополнительный бонус (как я понять) прояснения/упрощения вещей для самого perl, поскольку оператор ~~
будет иметь менее двусмысленный контекст для своих операций.
Вы упомянули массив. Я не вижу массив в вашем коде. Если вы действительно работаете с массивом, это может помочь: http://stackoverflow.com/questions/2860226/how-can-i-check-if-a-perl-array-contains-a-particular-value – bloodyKnuckles