Smartmatch und andere experimentelle Perl-Features

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

Vorheriges Thema - Nächstes Thema

Beta-User

any ist einleuchtend.

eq klappt halt auch mit Zahlen, aber == wirft einen Fehler bei jedem nicht-numerischen Element im Array.
Daher die Frage, ob nicht eine Funktion (mit eq) ausreichend wäre.
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

Dr. Boris Neubert

Die Funktion wäre ja dann contains_string()

An sich fände ich es gut, wenn beide Funktionen oder was noch besseres nach 99_Utils.pm oder nach fhem.pl käme. Liest Rudi hier mit?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

ZitatLiest Rudi hier mit?
Ja, ich warte nur die Ende der Diskussion und eine klare Ansage ab :)

erwin

Nachdem any nur ein true/false als Resultat liefert, wäre ich für "eq" - und nur eine function - am besten in fhem.pl
Gibts Nachteile/Pitfalls wenn man Zahlen mit eq vergleicht?
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Dr. Boris Neubert

Zitat von: erwin am 10 November 2024, 19:18:46Gibts Nachteile/Pitfalls wenn man Zahlen mit eq vergleicht?

Ich habe ChatGPT gefragt. Hier der relevante Schnipsel aus der Antwort:

Zitat... kann unerwartetes Verhalten verursachen, weil eq die Werte als Strings interpretiert. In den meisten Fällen funktioniert es zufällig, wenn die Zahlen ähnlich formatiert sind, aber sobald z.B. führende Nullen oder unterschiedliche Formate vorhanden sind, könnte das Ergebnis falsch sein.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Bei einer Abstimmung wäre ich auch dafür, BEIDE Funktionen zu implementieren. Und zwar sicherheitshalber in der fhem.pl, denn es gibt doch den einen oder anderen user, der seine 99_Utils.pm verhunzt.

Als Entwickler sollte man sich aber bei solchen grundlegenden Funktionen darauf verlassen können, dass sie auch wirklich vorhanden sind.

Es wird nach der Umstellung vermutlich ohnehin den einen oder anderen Supportfall geben, wenn Anwender ihr update nur unvollständig ausführen, weil sie beispielsweise mit exclude_from_update arbeiten. Aber man kann und sollte nicht jede Dummheit abfangen.
-----------------------
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

Zitat von: Dr. Boris Neubert am 01 November 2024, 14:29:00https://forum.fhem.de/index.php?topic=139688

#####################################
#
# smartmatch replacement
#
#####################################

# use contains_<type>($scalar, @array) instead of $scalar ~~ @array
# requires List:Util
# see https://www.perlmonks.org/?node_id=1067462

sub contains_numeric($@) {
  my ($scalar, @array) = @_;
  return any { $_ == $scalar } @array;
}

sub contains_string($@) {
  my ($scalar, @array) = @_;
  return any { $_ eq $scalar } @array;
}

Nachdem keine bessere Lösung vorgebracht wurde schlage ich nunmehr wie Udo vor, beide Funktionen in fhem.pl zu implementieren.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Habs eingecheckt, allerdings mit etwas Bauchschmerzen wegen
use List::Util qw(any);

betateilchen

Hallo Rudi,

würdest Du bitte die beiden neuen Funktionen noch in die Liste der "Forward declarations" am Anfang der fhem.pl aufnehmen? Diese Liste benutze ich gerne beim Suchen von passenden Funktionen :)

Danke!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig


betateilchen

Zitat von: rudolfkoenig am 01 Dezember 2024, 11:32:02Erledigt.

Danke.

Zitat von: rudolfkoenig am 30 November 2024, 19:55:15mit etwas Bauchschmerzen wegen
use List::Util qw(any);

Inzwischen habe ich das Paket libscalar-list-utils-perl in die dependencies für das Debian-Paket von FHEM aufgenommen, damit sollte es zumindest bei Neuinstallation unter Debian und Derivaten keine Probleme geben.
-----------------------
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: rudolfkoenig am 30 November 2024, 19:55:15Habs eingecheckt, allerdings mit etwas Bauchschmerzen wegen
use List::Util qw(any);
Sollte kein allzu großes Problem mehr sein, jedenfalls wenn ich das richtig zusammengefieselt habe:
{ Module::CoreList->first_release('List::Util', 1.33) }=>
5.019005
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

Zitat von: Dr. Boris Neubert am 30 November 2024, 12:50:00Nachdem keine bessere Lösung vorgebracht wurde schlage ich nunmehr wie Udo vor, beide Funktionen in fhem.pl zu implementieren.
Nimmst du die bitte aus Calendar wieder raus (https://forum.fhem.de/index.php?topic=139979.0)?
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

Dr. Boris Neubert

Zitat von: Beta-User am 04 Dezember 2024, 10:04:51
Zitat von: Dr. Boris Neubert am 30 November 2024, 12:50:00Nachdem keine bessere Lösung vorgebracht wurde schlage ich nunmehr wie Udo vor, beide Funktionen in fhem.pl zu implementieren.
Nimmst du die bitte aus Calendar wieder raus (https://forum.fhem.de/index.php?topic=139979.0)?
getan
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!