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 ?
Mein Test in der FHEM Kommandozeile:
{my $a = "367.0";;my @wp = split /\./,$a;;return @wp[0]}
Liefert 367 :)
Gruß Otto
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)
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 ?
aber split() nutzt doch auch nur regexp...
my $text = "Das ist ein String";
$text =~ /^(\S+)/;
return $1;
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 ;) ?