Problem mit Perl split() in 99_myUtils

Begonnen von dt2510, 08 Juli 2018, 20:37:33

Vorheriges Thema - Nächstes Thema

dt2510

Ich versuche gerade eine Zeichenkette an einem "." zu splitten und habe folgenden Befehl verwandt

$myPower enthält "367.0"

my @myArray2 = split(".",$myPower);
Log(3,$myArray2[0]);


Im Logfile wird eine Leerzeile geloggt und daraufhin bekomme ich die Meldung

PERL WARNING: Use of uninitialized value $text in concatenation (.) or string at fhem.pl line 950, <FH> line 3767.

Wie kann ich an einem "." trennen ohne dass Perl von einer Stringverkettung ausgeht ?

Otto123

#1
Mein Test in der FHEM Kommandozeile:
{my $a = "367.0";;my @wp = split /\./,$a;;return @wp[0]}
Liefert 367 :)
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

zwei Fehler in einem einzigen Funktionsaufruf, das ist cool :)


  • der Punkt muss maskiert werden, da er in regexp eine spezielle Funktion hat
  • doppelte Anführungszeichen dürfen nicht im split Operator verwendet werden, weil doppelte Anführungszeichen eine spezielle Funktion haben

Einen Lösungansatz hat Otto schon gepostet, wenn es mit Anführungszeichen sein soll, sieht das so aus:

split('\.',$myPower)

Und wenn es wirklich nur darum geht, den ganzzahligen Anteil zu bekommen, geht das auch ganz ohne split.

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

dt2510

Ah ja !!! Das hilft mir weiter 😊
Ich hab - von Delphi/Pascal kommend - immer noch Probleme mit den Perl Eigenheiten und RegEx meide ich wo es geht, weil ich immer noch nicht durchsteige.
Dann gibt es ja mit Sicherheit auch eine Funktion, das erste "Wort" eines Strings zu ermitteln ohne gleich splitten zu müssen oder ?

betateilchen

#4
aber split() nutzt doch auch nur regexp...


my $text = "Das ist ein String";
$text =~ /^(\S+)/;
return $1;

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

dt2510

Zitat von: betateilchen am 08 Juli 2018, 22:17:42
aber split() nutzt doch auch nur regexp...

weshalb waren wohl 2 Fehler in einem Aufruf ;) ?