FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomLee am 09 März 2020, 15:46:56

Titel: Wie klappt das mit exists ?
Beitrag von: TomLee am 09 März 2020, 15:46:56
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
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: CoolTux am 09 März 2020, 16:28:49
Das passt vorn und hinten nicht.
Was soll sk sein. Ein Array, ein Hash oder ein Skalar?
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: herrmannj am 09 März 2020, 16:31:25
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/
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: TomLee am 09 März 2020, 18:17:58
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 ?
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: Otto123 am 09 März 2020, 18:29:08
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
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: TomLee am 09 März 2020, 18:37:37
 Hat aber einen Nachteil, hier jetzt aber unrelevant.

{grep (/dori/,("test","apfel","doris"))}

liefert auch 1.

trotzdem Danke.
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: CoolTux am 09 März 2020, 18:52:39
Ein Array nach einem bestimmten Element kannst du mit einer Schleife durchsuchen.
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: TomLee am 09 März 2020, 19:33:49
Aha, es gibt optionale Parameter

{grep -o (/dori/,("test","apfel","doris"))}

liefert 0

edit:
{grep -o (/doris/,("test","apfel","doris"))}

aber auch ???
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: Otto123 am 09 März 2020, 22:46:27
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
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: TomLee am 11 März 2020, 11:53:37
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 ?
Titel: Antw:Wie klappt das mit exists ?
Beitrag von: Otto123 am 11 März 2020, 12:09:00
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}