I2C_MCP23017.pm PERL WARNING: Smartmatch is deprecated

Begonnen von Stelaku, 11 Januar 2026, 07:59:14

Vorheriges Thema - Nächstes Thema

Stelaku

Hallo alle zusammen

Ich habe heute bemerkt das ich beim hochfahren von Fhem diese Meldung im Log habe .2026.01.11 07:39:12 1: PERL WARNING: Smartmatch is deprecated at ./FHEM/52_I2C_MCP23017.pm line 331, <$fh> line 685.
2026.01.11 07:39:12 1: PERL WARNING: Smartmatch is deprecated at ./FHEM/52_I2C_MCP23017.pm line 340, <$fh> line 685.
2026.01.11 07:39:12 1: PERL WARNING: Smartmatch is deprecated at ./FHEM/52_I2C_MCP23017.pm line 352, <$fh> line 685.
2026.01.11 07:39:12 1: PERL WARNING: Smartmatch is deprecated at ./FHEM/52_I2C_MCP23017.pm line 356, <$fh> line 685.
Ich habe diesen Beitrag zum Calender Modul gefunden was mir selber leider nicht weiter hilft.
Calendar: Smartmatch is deprecated in Perl v5.38.2

mein System ist eine aktuelle Trixi Installation mit aktuellen Fhem auf einem Pi4.

Das Modul I2C_MCP23017 schein soweit zu funktionieren. Ich kann alle meine Eingänge und Ausgänge abfragen und steuern.

Vieleicht findet sich ja jemand der das fixen kann ?

Viele Grüsse

Stephan

Stelaku

Ich hab mal weitergesucht und mir die Vier Zeilen um die es geht angeschaut.
$msg .= (defined $msg ? "," : "") . "Port" . $_ unless ( ($_) ~~ @outports );
if ( ($po.$_) ~~ @scmd ) {
next unless ( ("A" . $_) ~~ @outports );
next unless ( ("B" . $_) ~~ @outports );

da ich von perl nur sehr wenig verstehe hat mir google so weit gesagt das es sich wohl um die ~~ hier handelt die nicht mehr in den nächsten Perl Versionen unterstützt werden. Und nach ein wenig weiterem lesen und Bemühung durch google habe ich die Vier Zeilen wie folgt geändert.

$msg .= (defined $msg ? "," : "") . "Port" . $_ unless ( (grep { $_ eq $_ } @outports ));
my $search = $po . $_;if ( (grep { $_ eq $search } @scmd )) {
next unless ( (grep { "A" . $_ eq $_ } @outports ));
next unless ( (grep { "B" . $_ eq $_ } @outports ));

Jetzt startet Fhem ohne die Vier Warnungen und ich kann alle meine Eingänge und Ausgänge wie gehabt steuern.
Ob das jetzt so richtig ist was ich da gemacht habe. Keine Ahnung.
Ich hoffe mal das Klaus sich das nochmal anschaut. Und das Modul dann auch neu eincheckt.

Viele Grüsse

Stephan

betateilchen

#2
fhem.pl stellt für den Ersatz von smartmatch inzwischen eigene Ersatzfunktionen zur Verfügung, die der Modulautor verwenden kann/sollte.

# smartmatch replacement #137776
# use contains_<type>($scalar, @array) instead of $scalar ~~ @array

sub contains_numeric($@)
sub contains_string($@)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!