7 Stimmen

Gegenteil von ~~ in Perl

Gibt es ein Gegenstück für den Operator ~~ in Perl? Ich habe es verwendet, um ein Element in einem Array abzugleichen, so:

my @arr = qw/hallo ma duhs udsyyd hjgdsh/;
print "ist drin\n" if ('duhs' ~~ @arr);

Dies druckt ist drin. Es ist ziemlich cool, weil ich nicht alle Elemente des Arrays durchgehen und jedes überprüfen muss. Mein Problem ist, dass ich etwas tun möchte, wenn kein Treffer vorhanden ist. Ich könnte auf die else Seite gehen, aber ich würde lieber ein Gegenstück für `~~' finden.

13voto

Leeft Punkte 3807

Sie können auch List::Util (nur neuere Versionen dieses Moduls) oder List::MoreUtils mit any, none und Co. verwenden.

use List::Util qw(any none);
my @arr = qw /hello ma duhs udsyyd hjgdsh/;
say "oh hi" if any { $_ eq 'hello' } @arr;
say "no goodbyes?" if none { $_ eq 'goodbye' } @arr;

Obwohl nicht nativ für Perl, benötigt es nicht das experimentelle Smart-Matching.

9voto

Miguel Prz Punkte 13563

Es sei denn == wenn nicht

print "ist nicht in\n" unless ('duhs' ~~ @arr);

Hinweis: Die intelligente Entsprechung ist experimentell in Perl 5.18+. Siehe Intelligente Entsprechung ist experimentell/veraltet in 5.18 - Empfehlungen? Verwenden Sie daher stattdessen folgendes:

print "ist nicht in\n" unless grep { $_ eq 'duhs' } @arr;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X