Abhängig vom Inhalt der Strings ist eine Regex sehr praktisch:
%Vor%Wenn dies nicht möglich ist, können Sie über eine Liste springen:
%Vor%In Perl 5.10 oder besser:
%Vor% Der Operator ~~
führt eine intelligente Übereinstimmung zwischen seinen Argumenten aus.
Verwenden Sie List::MoreUtils qw{any}
Dies ist möglicherweise schneller als die Verwendung von grep
, da List::MoreUtils::any
vorzeitig beendet wird, wenn eine Übereinstimmung gefunden wird, während grep
eine vollständige Liste von Übereinstimmungen erstellen kann. Ich sage "könnte", weil Perl möglicherweise if (grep ...
optimieren könnte. Es könnte nicht sein. Aber List::MoreUtils::any
endet früh und ist deskriptiver als das if (grep ...
idiom.
Machen Sie einen Hash, der Schlüssel aller Zeichenfolgen enthält, die Sie abgleichen möchten
%Vor% Dies hat den Nachteil einer Rüstzeit und der Kosten des für den Hash verwendeten Speichers, aber der Vorteil ist, dass die Übereinstimmungszeit eher wie O (log N) ist. Also, wenn Sie viele verschiedene Werte von $var
haben, die Sie testen möchten, dann könnte es insgesamt schneller sein.
Erstellen Sie eine Regex, die allen Ihren Strings entspricht
%Vor% OK, das ist also in Ordnung, wenn Ihre Strings buchstäblich qw{str1 str2 str3}
sind, aber was ist, wenn es sich um eine Liste beliebiger Strings handelt?
Sie könnten Regexp :: Assemble verwenden, um eine Liste von Regexps zu einer einzigen optimierten Regexp zusammenzufassen.
Ich scherze halb, aber das wird es tun:
%Vor%Siehe auch diesen Perl-Mönch-Thread
Tags und Links perl