Hauptmenü

Wie klappt das mit exists ?

Begonnen von TomLee, 09 März 2020, 15:46:56

Vorheriges Thema - Nächstes Thema

TomLee

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

CoolTux

Das passt vorn und hinten nicht.
Was soll sk sein. Ein Array, ein Hash oder ein Skalar?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

herrmannj


TomLee

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 ?

Otto123

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
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

TomLee

 Hat aber einen Nachteil, hier jetzt aber unrelevant.

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

liefert auch 1.

trotzdem Danke.

CoolTux

Ein Array nach einem bestimmten Element kannst du mit einer Schleife durchsuchen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TomLee

#7
Aha, es gibt optionale Parameter

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

liefert 0

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

aber auch ???

Otto123

#8
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
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

TomLee

Bin einfach zu doof.

Hier 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 ?

Otto123

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}
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