FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomLee am 07 Juni 2021, 09:43:44

Titel: [geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 07 Juni 2021, 09:43:44
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
Titel: Antw:PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 07 Juni 2021, 10:36:54
Danke.
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 07 Juni 2021, 12:01:54
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';; }
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: Beta-User am 07 Juni 2021, 12:20:09
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.

Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: betateilchen am 07 Juni 2021, 12:31:43
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.
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 08 Juni 2021, 20:03:57
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 ?
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 08 September 2021, 15:47:58
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 (http://www.mathe2.uni-bayreuth.de/perl/GK/einfuehrung.htm#print) Punkt der Einführung in Perl, wenn man sich dort auch mal eingelesen hatte.

ZitatAlle Perl-Befehle werden am Ende mit einem ; abgeschlossen.
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 29 Oktober 2021, 21:30:56
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 ?
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: Damian am 29 Oktober 2021, 21:37:00
Du kannst ein Semikolon immer vor einer geschweiften Klammer-zu weglassen.
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 29 Oktober 2021, 21:41:00
Danke.


Wo steht das ?
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: Damian am 29 Oktober 2021, 22:13:37
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.
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: schwatter am 29 Oktober 2021, 23:29:40
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
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: TomLee am 30 Oktober 2021, 01:11:18
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 ?
Titel: Antw:[geklärt]PERL: Wie match mit Bereichsoperator ?
Beitrag von: MadMax-FHEM am 30 Oktober 2021, 02:20:23
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