[gelöst] Perl Frage zu Userreading

Begonnen von Waldmensch, 15 Juli 2019, 20:32:57

Vorheriges Thema - Nächstes Thema

Waldmensch

Ich habe ein Userreading, was mir über die Stati des Mähroboters die Gartenbewässerung beeinflussen soll. Folgender Code:

Collision_Risk:status:.* {
my @array = ( 4,5,6,30,32,33 );
my $match = ReadingsVal("$name","status",0);
(grep /$match/,@array) ? 1 : 0;;}


Das funktioniert soweit, bis auf die Tatsache, das bei $match = 0 das grep scheinbar einen Treffer landet und das Userreading eine unerwünschte 1 zurückgibt. Kann ein Perl Fuchs mal drüberschauen und einen Tipp geben, wie das zu umschiffen ist? Der Plan ist, wenn $match exakt im @array enthalten ist, soll das Userreading 1 sein. In allen anderen Fällen 0. Ich wollte mir eine Schleife oder switch/case ersparen.

Otto123

#1
ich bin kein Perl Fuchs aber ein Blick ins Buch bzw. hier http://www.hidemail.de/blog/grep-perl.shtml
sagt mir, der grep Ausdruck sollte so sein:
grep {$_==$match}@array

Der gibt aber auch schon 1 und 0 zurück, also den ? Teil Kannst Du Dir aus meiner Sicht sparen.
Also so, ungetestet:
Collision_Risk:status:.* {
my @array = ( 4,5,6,30,32,33 );
my $match = ReadingsVal("$name","status",0);
grep {$_==$match}@array}


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

DeeSPe

Einfach im Regex Anfang und Ende beschränken:
(grep /^$match$/,@array) ? 1 : 0;;

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Waldmensch

Zitat von: DeeSPe am 16 Juli 2019, 08:28:20
Einfach im Regex Anfang und Ende beschränken:
(grep /^$match$/,@array) ? 1 : 0;;

Gruß
Dan

BINGO! Genau so funzt es :)

Collision_Risk:status:.* {
my @array = ( 4,5,6,30,32,33 );
my $match = ReadingsVal("$name","status",0);
(grep /^$match$/,@array) ? 1 : 0;;}