Perl Warning „Smartmatch is experimental“
Auf NerdsHeaven.de präsentieren wir dir starke Deals & Angebote im Bereich Technik und Gadgets. Installiere dir jetzt unsere Android oder iOS App, um keine Knaller-Angebote mehr zu verpassen.
Vor Kurzem musste ich feststellen, dass verschiedene meiner Perl-Scripte nicht mehr korrekt arbeiten und Fehlermeldungen ähnlich „Smartmatch is experimental“ zurückgeben. Grund hierfür ist Perl >= 5.18, wo das Feature Smartmatching als experimentell eingestuft wurde (Smartmatch war wohl zu smart ).
- Beispiel Smartmatching:
m/(error|timeout)/i ~~ @a_record
Es existieren nun verschiedene Lösungen, um das Problem zu umgehen:
- use warnings; (ja, dies sollte normalerweise immer genutzt werden) weglassen bzw. durch no warnings; ersetzen => sehr schlechte Idee
Nutzung von no warnings ‚experimental::smartmatch‘; => funktioniert allerdings nur ab Perl 5.18
- CPAN Modul experimental nutzen, d.h. Modul installieren und im Source entsprechend mit use experimental ’smartmatch‘; einbinden => meines Erachtens die „sauberste“ Lösung
Rüdiger
29.06.2022, 11:50Auch eine saubere Lösung wäre, auf den Smartmatch zu verzichten, dort, wo aus dem Kontext klar ist, was gemeint war.
Beispielsweise wurde in dieser if-Abfrage
if ($type ~~ [ 'docu', 'code', '' ]) { … }
der Smartmatch-Operator nur verwendet, um drei mit or verknüpfte Stringvergleiche zu vermeiden.
Das ist zweifellos lesbarer, aber man kann in diesem Fall auch – wenn man unbedingt die drei Stringvergleiche vermeiden will – einen regex mit Alternierung benutzen:
if ($type =~ /^(docu|code|)$/) { … }