Umwandlung ASCII->Unicode mit styles (bold, italics, monospace) in Perl

Begonnen von Adimarantis, 31 Januar 2022, 13:25:15

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: CoolTux am 05 Februar 2022, 06:48:50
Oder man dokumentiert es halt kurz.
Das war aber nicht "pro Prototypen" zu verstehen, oder.... ;)
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

CoolTux

Zitat von: Beta-User am 05 Februar 2022, 07:37:39
Das war aber nicht "pro Prototypen" zu verstehen, oder.... ;)

Ich habe einfach in meinen nicht FHEM Projekten hinter jeder Routine kurz dokumentiert was als Übergabe erwartet wird. Ist ja nicht so wild  :D
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

Adimarantis

Doku versteht sich eigentlich von selbst (oder sollte es).
Habs jetzt mal eingecheckt und werde dann morgen schauen ob es per Update da landet wo es soll, bevor ich das Modul update. Sicher ist sicher :)
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Beta-User

Ist da, enthält aber noch Prototypen und ein paar andere Kleinigkeiten, über die man reden könnte...

Vielleicht ist nicht klar, was ich meine, daher ein Auszug:
use Carp qw( carp );
[...]

sub formatTextUnicode {
    my $format = shift // carp q[No format provided]  && return;
    my $msg    = shift // carp q[No message provided] && return;
    if (ref $format ne 'SCALAR' || ref $msg ne 'SCALAR') {
        carp q[SCALAR type argumends are required] && return;
    }


[OT] @CoolTux:
Irgendwie stolpern wir ja immer mal wieder über das "decode_json", die Frage, wie man das "sicher einpackt" und das "library-Massaker". Würde es nicht ggf. Sinn machen, das durch eine wrapper-lib zu beerdigen? (Können das gerne gesondert diskutieren).
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

Adimarantis

Ok... man lernt nie aus.

Und der Vorteil ist, dass ein falscher Aufruf (oder eine API Änderung) zu keinem fatalen Fehler (=FHEM restart) führt, sondern eine Fehlermeldung (wohin?) schreibt und "undef" zurückgibt?
Ist Carp denn standardmäßig vorhanden - ist ja auch ein CPAN Modul?
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Beta-User

Zitat von: Adimarantis am 07 Februar 2022, 19:35:46
Ist Carp denn standardmäßig vorhanden - ist ja auch ein CPAN Modul?

corelist Carp

Data for 2020-02-20
Carp was first released with perl 5

ZitatUnd der Vorteil ist, dass ein falscher Aufruf (oder eine API Änderung) zu keinem fatalen Fehler (=FHEM restart) führt, sondern eine Fehlermeldung (wohin?) schreibt und "undef" zurückgibt?
Eine Beschreibung gibt es unter https://perldoc.perl.org/Carp.

Grundsätzlich führen Prototypen bei einem unpassenden Aufruf "nur" dazu, dass in $@ halt steht, dass der mismatch vorliegt, weder das eine noch das andere führt direkt zu einem Neustart. Es wird aber nicht verhindert, dass "undef" als Argument übergeben wird, um die Zahl "passend" vorzugaukeln (oder zu machen), Taschenspielertricks verwendet werden, um den geforderten Prototypen zu umgehen oder zu erweitern usw..
Mein Vorschlag hat also zwei Teile:
- Verzicht auf Prototypes und
- Qualifiziertere Rückmeldung, was nicht stimmt.

Beides ginge auch unabhängig voneinander...

PS: "return undef;" ist meistens auch ein no-go... (genau genommen nach meinem Verständnis: nur sinnvoll, wenn der Aufruf ein Array zurückhaben will und wirklich gewollt ist, dass eines der Elemente des Array undef ist.) 
return undef if $@;
sollte nach meinem Verständnis eher in die Richtung gehen:
return  if $@;
(EDIT: Code geändert)

Im Zweifel auch mal http://perlcritic.com/ konsultieren ;) .
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