[99_Utils.pm] round() in Konflikt mit Math::Round

Begonnen von mahowi, 06 Dezember 2017, 17:28:14

Vorheriges Thema - Nächstes Thema

mahowi

In diesem Thread ist das Problem aufgetaucht, daß die Funktion round() aus 99_Utils.pm im Konflikt steht mit der gleichnamigen Funktion aus Math::Round.

Während die Funktion aus 99_Utils auf die angegebene Anzahl Nachkommastellen rundet, rundet die Funktion aus Math::Round auf die nächste Ganzzahl. Wenn jetzt ein Modul Math::Round importiert, wird automatisch in FHEM diese Funktion verwendet.

Ich sehe es als problematisch, das hier eine FHEM-interne Funktion denselben Namen hat wie die eines offiziellen Perl-Moduls. Allerdings gibt es einige Module, die round() aus 99_Utils verwenden:
00_SIGNALduino.pm
00_SONOS.pm
14_SD_WS09.pm
14_SD_WS.pm
31_MilightDevice.pm
31_Nello.pm
33_readingsGroup.pm
34_ESPEasy.pm
38_JawboneUp.pm
44_TEK603.pm
50_HP1000.pm
52_I2C_BME280.pm
70_ENIGMA2.pm
70_Pushover.pm
76_MSGMail.pm
95_Astro.pm
98_dewpoint.pm
98_SVG.pm
98_update.pm
RESIDENTStk.pm
UConv.pm


Die einfachste Variante, den Konflikt aufzulösen, wäre die Umbenennung der Funktion in 99_Utils und den genannten Modulen. Spricht da irgendetwas dagegen?
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

hotbso

Na, offizielle Perl Module gibt es Hunderte, das kann also immer wieder mal passieren.

Viele Autoren haben ja in Ihren FHEM-Modulen auch schon Math::Round rausgeschmissen, wie man an den Kommentierungen erkennt.

Aktuell ist Math::Round nur noch in 2 "offiziellen" Modulen drin. Vielleicht sollte man die reparieren statt der 16 anderen.

rudolfkoenig

Eigentlich haetten wir aufpassen muessen, und bei dem eigenen round() in Utils.pm einen anderen Namen waehlen muessen.
Da die nachtraegliche Umstellung jetzt aber 16 Module betrifft, das Problem aber nur von einem "offiziellen" Modul (98_MediaList.pm) verursacht wird, und round in vielen Faellen auch direkt von FHEM-Benutzer verwendet wird, bin ich dafuer, "use Math::Round qw/round/" in FHEM Modulen zu meiden.

betateilchen

Zitat von: mahowi am 06 Dezember 2017, 17:28:14
Allerdings gibt es einige Module, die round() aus 99_Utils verwenden:

... und unzählige 99_xxxUtils.pm und unzählige at notify und andere Devices, die die Funktion verwenden können.

Das grundsätzliche Problem sehe ich eher darin, dass viele Entwickler sich gar nicht mehr die Mühe machen, nachzuschauen, was FHEM alles von Haus aus schon bietet und einfach irgendwelche oft überflüssigen perl-Module zusätzlich verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mahowi

Zitat von: betateilchen am 07 Dezember 2017, 10:27:47
Das grundsätzliche Problem sehe ich eher darin, dass viele Entwickler sich gar nicht mehr die Mühe machen, nachzuschauen, was FHEM alles von Haus aus schon bietet und einfach irgendwelche oft überflüssigen perl-Module zusätzlich verwenden.

Das kann man so oder so sehen. Ich persönlich finde es überflüssig, in jedem Programm das Rad neu zu erfinden anstatt auf schon bestehende Module zurückzugreifen.

Hier ist es halt seit Jahren so gewachsen, und natürlich ist der einfachste Weg, darauf hinzuweisen daß "use Math::Round qw/round/" zu vermeiden ist.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee