[geklärt]PERL: Wie match mit Bereichsoperator ?

Begonnen von TomLee, 07 Juni 2021, 09:43:44

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

kann mir wer sagen wie man das korrekt umsetzt, spiel jetzt schon fast eine Stunde damit rum ?

{my $mo='7';;$mo =~ m/5..11/ ? 'ja' : 'nein'}

Gruß

Thomas

TomLee


TomLee

#2
Komischer Kauz.

Verstehs trotzdem noch nicht.

Dein Vorschlag (letzter Beitrag), den du wieder ( nicht das erste mal und nicht nur bei mir) gelöscht hast, funktioniert:

{ my $mo=7;;$mo = ($mo ~~ [5..11]) ? 'ja' : 'nein';; }

Also auch das (Kommandozeile) :

{ $month = ($month ~~ [5..11]) ? '' : '00:00-24:00';; }

das:

{($month ~~ [5..11]) ? '' : '00:00-24:00';; }

und auch das klappt:

{ $month ~~ [5..11] ? '' : '00:00-24:00';; }

Beta-User

Na ja, deine Beträge _könnte_ man auch so verstehen, dass du fremde Federn verkauft hast, ohne darauf hinzuweisen bzw. eine Art "versteckten Doppelpost" erstellt hättest, oder evtl. war auch das folgende der Grund...?

Warum ich hier jetzt aber überhaupt was schreibe: der Smartmatch-Operator ist nicht unbedingt einfach, und schon seit 5.10 "experimentell" - ohne dass sich da seitdem was signifikantes getan hätte, siehe https://perldoc.perl.org/perlop.html#Smartmatch-Operator.

Ich hatte den (übernommen) Operator in einem Modul drin gehabt (vermutlich RandomTimer), dann aber auf Anraten von RichardCZ dort ausgebaut - ich nehme nach wie vor an, dass er ggf. besser weiß, wie stark ggf. der Ausbau des experimentellen Features hinter den Perl-Kulissen diskutiert wird.

Langer Rede kurzer Sinn: Hier würde ich eher eine einfache "$month > 4 && $month < 12" -Abfrage einbauen, als ein zweifelhaftes und in den Details schwieriges feature vorzuschlagen.

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

Zitat von: Beta-User am 07 Juni 2021, 12:20:09
Langer Rede kurzer Sinn: Hier würde ich eher eine einfache "$month > 4 && $month < 12" -Abfrage einbauen,

Ich auch, aber die Fragestellung war ja explizit nach einem Bereichsoperator.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Muss nochmal, weil ich das interessant finde, mir gleich aufgefallen war, aber gestern nicht zum nachhaken kam.

Der Kauz hat sein gezeigtes Beispiel korrekt mit einem Semikolon beendet, das hab ich auch gelesen das man Anweisungen in Perl immer mit Semikolon beenden sollte.

Die werden aber oft hier im Forum bei "onelinern" weggelassen, auch bspw. in der mqtt2.Template.

Auch wenns ohne klappt ist es doch eigentlich nicht korrekt, oder ?

TomLee

Zitat... das hab ich auch gelesen das man Anweisungen in Perl immer mit Semikolon beenden sollte.

Mir egal ob alte Kamelle/Sch...

Bin zufällig drauf gestosssen, wo genau es stand.

Gleich beim dritten Punkt der Einführung in Perl, wenn man sich dort auch mal eingelesen hatte.

ZitatAlle Perl-Befehle werden am Ende mit einem ; abgeschlossen.

TomLee

Zitat von: TomLee am 08 September 2021, 15:47:58
Mir egal ob alte Kamelle/Sch...

Sry

Zitat von: MadMax-FHEM am 28 Oktober 2021, 19:45:09
Ist ja nur 1 Befehl, da ist Perl wohl nicht so genau... ;)

 
Zitat von: MadMax-FHEM am 29 Oktober 2021, 19:42:25
Und noch mal, wenn du in den geschweiften Klammern (bei/nach if/else) nur einen Befehl hast, dann kannst du die/den Strichpunkt(e) auch ganz weglassen.

Da keiner bisher keiner geantwortet hat und die letzte Frage für mich immer noch offen ist/war, ziehe ich für mich aus diesen zwei Aussagen (Zitaten oben) bzw. der letzteren, Heute, das man das Semikolon weglassen kann wenn es nur eine Anweisung gibt ?

Damian

Du kannst ein Semikolon immer vor einer geschweiften Klammer-zu weglassen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TomLee


Damian

Zitat von: TomLee am 29 Oktober 2021, 21:41:00
Danke.


Wo steht das ?

Keine Ahnung.

Ich nutze diese Perleigenschaft aber nicht, da man beim erweitern des Programmcodes plötzlich fehlende Semikolons mitten im Code hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

schwatter

Mich hat es jetzt auch interessiert. Ich gaube, hier ist es ganz gut erklärt.
https://www.perl-community.de/bat/poard/thread/7940?p=2

Gruß schwatter

TomLee

Danke, wenn man das so liest ist es doch ganz einfach zu erklären, das Semikolon ist ein Trenner von Anweisungen, für eine Anweisung brauchts auch keinen Trenner.

ZitatIch nutze diese Perleigenschaft aber nicht, da man beim erweitern des Programmcodes plötzlich fehlende Semikolons mitten im Code hat.

Wie das gemeint ist, hab ich bis jetzt nicht verstanden, würd ich aber gerne. ::)

Ist es so zu verstehen das du sie grundsätzlich mit angibst ?

MadMax-FHEM

Zitat von: TomLee am 30 Oktober 2021, 01:11:18
Ist es so zu verstehen das du sie grundsätzlich mit angibst ?

Ich hatte es so verstanden und mache es norm. auch so, also Semikolon anfügen (ist in anderen Sprachen obligatorisch und ich daher gewohnt).
Wenn man dann nämlich mal eine Zeile ergänzt kann es nicht passieren, dass man es dann vergisst...
Ja es gibt einen Fehler und man kann es schnell beheben aber lästig/unnötig... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)