Perl Warning „Smartmatch is experimental“

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 :-D ).

  • 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
Kommentare (1)
  • Rüdiger

    29.06.2022, 11:50

    Auch 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|)$/) { … }

Kommentar schreiben

Optional, wird nicht veröffentlicht.
Bild entfernen Bild zum Kommentar hinzufügen (JPG, PNG)