FHEM Forum

FHEM => Sonstiges => Thema gestartet von: dt2510 am 08 Juli 2018, 20:37:33

Titel: Problem mit Perl split() in 99_myUtils
Beitrag von: dt2510 am 08 Juli 2018, 20:37:33
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 ?
Titel: Antw:Problem mit Perl split() in 99_myUtils
Beitrag von: Otto123 am 08 Juli 2018, 21:06:30
Mein Test in der FHEM Kommandozeile:
{my $a = "367.0";;my @wp = split /\./,$a;;return @wp[0]}
Liefert 367 :)
Gruß Otto
Titel: Antw:Problem mit Perl split() in 99_myUtils
Beitrag von: betateilchen am 08 Juli 2018, 21:12:44
zwei Fehler in einem einzigen Funktionsaufruf, das ist cool :)


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)
Titel: Antw:Problem mit Perl split() in 99_myUtils
Beitrag von: dt2510 am 08 Juli 2018, 21:49:51
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 ?
Titel: Antw:Problem mit Perl split() in 99_myUtils
Beitrag von: betateilchen am 08 Juli 2018, 22:17:42
aber split() nutzt doch auch nur regexp...


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

Titel: Antw:Problem mit Perl split() in 99_myUtils
Beitrag von: dt2510 am 09 Juli 2018, 08:49:24
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 ;) ?