Hallo,
kann mir bitte wer sagen wie ich das mit $sk in dem exists mache, bekomme diese Fehlermeldung Error evaluating du_Testy userReading filter3: Global symbol "%sk" requires explicit package name (did you forget to declare "my %sk"?) at (eval 1103) line 5.
syntax error at (eval 1103) line 5, near ") return"
exists hab ich gelesen soll true zurückgeben wenn wahr, das ist auch das was ich später brauche, aber wie lasse ich mir hier jetzt mit return dann eine 1 ausgeben.
{
my $sk="test,apfel,doris";;
if(!exists($sk{'test'})) return 1;;}
Gruß
Thomas
Das passt vorn und hinten nicht.
Was soll sk sein. Ein Array, ein Hash oder ein Skalar?
sorry aber das ist kompletter Murks. Perl basics sind im Netz weit verfügbar. "exists" funktioniert mit einem hash.
https://perldoc.perl.org/functions/exists.html
https://www.perl.com/article/27/2013/6/16/Perl-hash-basics-create-update-loop-delete-and-sort/
OK, war beim stöbern zufällig auf exists gestossen bin, ich gestehe das ich mich wenig zuvor mit beschäftigt,
Eigentlich bekomme ich mit FileRead aus einer Datei die einen JSON beinhaltet ein Array zurück.
So sieht das eigentlich aus und hatte gedacht ich könnte jetzt mit exists einfach nach einem Text in $sk suchen.
{ my ($error, @content) = FileRead({FileName=> "/irgendwas.txt", ForceType => "file" });;
my $sk=join(" ",@content);;
return $sk
}
Dann anders: Gibt es auch eine Funktion mit der man die Elemente eines Arrays nach einem String durchsuchen kann ?
Oder bleibt nur mit regexp $sk durchsuchen ?
Hi,
Kurzform :) für die FHEM Kommandozeile zum testen
liefert 1
{grep (/doris/,("test","apfel","doris"))}
liefert 0
{grep (/willi/,("test","apfel","doris"))}
gruß Otto
Hat aber einen Nachteil, hier jetzt aber unrelevant.
{grep (/dori/,("test","apfel","doris"))}
liefert auch 1.
trotzdem Danke.
Ein Array nach einem bestimmten Element kannst du mit einer Schleife durchsuchen.
Aha, es gibt optionale Parameter
{grep -o (/dori/,("test","apfel","doris"))}
liefert 0
edit:
{grep -o (/doris/,("test","apfel","doris"))}
aber auch ???
Naja ist halt regEx - dass muss man richtig machen ;)
https://regex101.com/
{grep (/^dori$/,("test","apfel","doris"))}
{grep (/^doris$/,("test","apfel","doris"))}
Ich weiß ja nicht genau was Du willst :)
Entspricht aber m.M.n. deinem ursprünglichem Ansatz von exists
Bin einfach zu doof.
Hier (http://www.hidemail.de/blog/grep-perl.shtml) steht zu:
{ my @a=(1,2,3,4,5,6,7,8,9,10,11,12,13);; return grep {$_<10 && $_>5;} @a}
ZitatEs wird ein Array mit den Elementen 1 - 13 angelegt und per grep werden alle Elemente größer 5 und kleiner 10 ausgegeben.
Ausgabe daher:
6789
Wenn ich das in der Befehlszeile eingebe bekomme ich immer die Anzahl, wie bekomme ich die Elemente selbst ?
Du modifizierst ja die Quelle, pack das wie dort beschrieben in eine Datei und führe die mit perl dateiname aus, dann funktioniert das auch.
Oder nimm wie in der Quelle zum testen print und schau ins Logfile ;D
{ my @a=(1,2,3,4,5,6,7,8,9,10,11,12,13);; print grep {$_<10 && $_>5} @a}