Smartmatch und andere experimentelle Perl-Features

Begonnen von betateilchen, 04 April 2024, 23:50:54

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: rudolfkoenig am 04 April 2024, 23:37:17Off-Topic: mein perl 5.38 beschwert sich: Smartmatch is deprecated at FHEM/TimeSeries.pm line 113.

Auch offtopic: bei switch ist es ähnlich. Diese Experimente sollen wohl ab 5.42 komplett entfernt werden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Ich habe den Beitrag von Udo abgeteilt und hierher gestellt, damit wir uns mit dem Schicksal von Smartmatch, given, when, switch und was weiß ich noch für experimentellen Features von Perl befassen und für den FHEM-Code darauf reagieren.

Interessant (habe mich aber nicht weiter damit auseinandergesetzt): Perl 5.20 and the fate of smart matching and given-when.

Ich liebe ~~ für die Prüfung, ob ein Element in einem Array steht.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

CoolTux

Na toll. Da darf ich ja dann einiges umschreiben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Zitat von: CoolTux am 05 April 2024, 13:30:07Na toll. Da darf ich ja dann einiges umschreiben.
So neu ist das ja eigentlich sich nicht... In der Perl-Ecke gibt es dazu einige "Warnungen" - die sind mehrere Jahre alt...

Smartmatch z.B. müßte relativ einfach mit einem grep zu fixen sein. (Muss ggf. mal suchen.)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

betateilchen

#4
Zitat von: CoolTux am 05 April 2024, 13:30:07Na toll. Da darf ich ja dann einiges umschreiben.

Zitat von: Beta-User am 05 April 2024, 13:37:13So neu ist das ja eigentlich sich nicht...

Stimmt, die smartmatch Problematik ist seit 5.18 bekannt und deshalb sind die darauf basierenden features (z.B. switch/given) seither als "experimental" gekennzeichnet. Dass die irgendwann wegfallen, ist nicht überraschend, inzwischen weiß man halt auch, wann das passieren wird.

Meine drei aktiven Module, die davon betroffen sind, habe ich heute umgebaut. Dabei habe ich given/when einfach durch if/elsif/else ersetzt. Das war die einfachste Lösung, die versionsunabhängig und ohne weitere Modul-Abhängigkeiten funktioniert.

Zitat von: Dr. Boris Neubert am 05 April 2024, 09:24:15Ich liebe ~~ für die Prüfung, ob ein Element in einem Array steht.

Zitat von: Beta-User am 05 April 2024, 13:37:13Smartmatch z.B. müßte relativ einfach mit einem grep zu fixen sein.

if (grep(regex, @array)) {}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: betateilchen am 05 April 2024, 13:53:01if grep(regex, @array) {}

Meine mich erinnern zu können, dass das perlcritics in dieser Fassung nicht optimal findet und die block-Variante vorschlägt. Mobil, ungetestet so:
if (grep m{regex} @array) {}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

betateilchen

ja, ich hatte auf die Schnelle beim Tippen die Klammern vergessen.

Ansonsten bleibe ich aber bei dieser Variante:

if (grep(regex, @array)) {}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Hatte nicht behauptet, dass es in der Komma-separierten Variante nicht funktioniert.

Wollte nur anregen, bei einer Überarbeitung der Module ggf. schlicht das online-tool oä. zu nutzen und bei der Gelegenheit gleich die (afair) "bessere" Variante zu wählen. That's all...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Hier noch ein (funktionierendes und hoffentlich verständliches) Beispiel, wie das z.B. in "98_monitoring.pm" nach der perlcritic-Optimierung aussieht (unter Ignorierung der "postfix-if"-critic...):
return if @blacklist && grep { m{\A${name}\z}x } @blacklist;
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

betateilchen

#9
Zitat von: Beta-User am 05 April 2024, 15:23:38Hier noch ein ... Beispiel, wie das z.B. in "98_monitoring.pm" nach der perlcritic-Optimierung aussieht (unter Ignorierung der "postfix-if"-critic...)

Entschuldigung, aber das ist doch Käse.

Entweder, Du willst es (im Sinne von perlcritic) richtig machen, dann mach es aber auch komplett richtig.
Aber doch bitte nicht den einen (perlcritic)-Mangel beseitigen und den anderen bewusst ignorieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: betateilchen am 05 April 2024, 15:47:41Entweder, Du willst es (im Sinne von perlcritic) richtig machen, dann mach es aber auch komplett richtig.
Aber doch bitte nicht den einen (perlcritic)-Mangel beseitigen und den anderen bewusst ignorieren.
Schön, dass du das highlightest :) .
Auch Perlcritic kennt mehrere Stufen, und macht Unterschiede. Das "grep"-Thema liegt (aus dem Kopf) auf Level 4, postfix-if dürfte "cruel" sein.
In der Regel würde ich Level 4+5 beseitigen wollen, ausgenommen manche Dinge, die im FHEM-Kontext wenig sinnvoll sind oder im konkreten Fall einfach überzogen, bei Level 3 kann man vermutlich so oder so votieren.
"Meine" Codes laufen (mit wenigen Pflastern) in der Regel bei bis Level-3-Checks (einschließlich) ohne Meckern durch, und die Dinge, die ich über diesen Weg gefunden hatte, waren praktisch alle ziemlich valide.

 Bei postfix-if geht es eigentlich v.a. um Lesbarkeit, und wenn da vorne ein "return" steht, macht mein Editor ein schönes Syntax-highlighting und es ist direkt sichtbar, dass hier eine "Ausgangstür" ist - Ziel (anders) voll erreicht. Darf ich ja entscheiden... 
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files