Hauptmenü

Escaping von $#a

Begonnen von decaflo, 20 März 2013, 00:22:19

Vorheriges Thema - Nächstes Thema

decaflo

Hallo zusammen,

wie kann ich in einer fhem-perl-definition den perl-Ausdruck $#a für den größten Index der Elemente des array @a verwenden? Das array wird mit @@a escapet aber wie $#a? In meinen Versuchen wird das # immer als Kommentar interpretiert und der Rest der Methode abgeschnitten, zum Beispiel so:

fhem> define test at +3:00:00 { my @@fhts=sort(devspec2array("TYPE=FHT"));; my $anz=$#fhts; }
fhem> list test
Internals:
   CFGFN      
   DEF        +3:00:00 { my @@fhts=sort(devspec2array("TYPE=FHT")); my $anz=$
   NAME       test

Muss ich auf scalar(@@fhts) ausweichen?

Besten Dank und schöne Grüße, Florian

fritz

Hallo, in fhem bin ich noch neu, aber in Perl schon eine Weile zu Hause. Nur: in Perl ist "my @@fhts" nicht erlaubt...


12:08:55 fritz@jupiter:~> perl -e 'my @parms=@ARGV; my $anz=@parms; print "anz=$anz\n"' a b c d e f g h
anz=8
12:09:15 fritz@jupiter:~> perl -e 'my @@parms=@ARGV; my $anz=@@parms; print "anz=$anz\n"' a b c d e f g h
Bareword found where operator expected at -e line 1, near "@@parms"
        (Missing operator before parms?)
Bareword found where operator expected at -e line 1, near "@@parms"
        (Missing operator before parms?)
Can't use global @@ in "my" at -e line 1, near "my @@"
syntax error at -e line 1, near "@@parms"
syntax error at -e line 1, near "@@parms"
Execution of -e aborted due to compilation errors.


Angenommen, dein Array wär lediglich @fhts, dann bekommst Du die Anzahl der Elemente einfach durch $anz=@fhts.

HTH

<F>

decaflo

Wenn Du in fhem perl code einbettest, müssen bestimmte Regeln fürs escaping befolgt werden, z.B. @@ für @ (s. http://fhem.de/commandref.html#notify)
Wie ich mittlerweile erfahren habe ist das escaping aber nicht unbedingt konsistent, man muss sich halt einfach an die Regeln halten.
'$#array' geht halt nicht, aber @array im skalaren Kontext schon (wie in Deinem Beispiel).

Dass @@ in perl nicht geht, ist mir klar, aber trotzdem danke!

fritz

Zitat von: decaflo schrieb am Mo, 25 März 2013 11:37Wenn Du in fhem perl code einbettest, müssen bestimmte Regeln fürs escaping befolgt werden, z.B. @@ für @

Ich vermutete so etwas ähnliches bereits, fand aber bei meinen Studien der Basics keinen entsprechenden Hinweis. Dank für Deinen Link, aber ohne den Kontext hätte ich das auch daraus nicht ersehen. Gibt es eigentlich irgendwo so etwas wie "FHEM-Perl for Perl Programmers"?

Zitat'$#array' geht halt nicht, aber @array im skalaren Kontext schon (wie in Deinem Beispiel).

...ist was, worüber ich seinerzeit auch stolperte - deswegen erlaubte ich mir (quasi als "Einstand") diesen Hinweis. Auch wenn's noch nicht soooo schwierig war. Mal sehen, vielleicht kommen ja mal anspruchsvollere Codestückchen aus meiner Tastatur. Lasst mir noch'n bisschen Zeit dazu :-)

Viele Grüße

<F>

decaflo

Zitat von: Fritz schrieb am Mo, 25 März 2013 20:04Gibt es eigentlich irgendwo so etwas wie "FHEM-Perl for Perl Programmers"?

Mir ist nur @@ ;; und %% bekannt. Das ist offenbar auch im Fluss (s. diese Ankündigung)
 
Zitat von: Fritz schrieb am Mo, 25 März 2013 20:04...ist was, worüber ich seinerzeit auch stolperte - deswegen erlaubte ich mir (quasi als "Einstand") diesen Hinweis. Auch wenn's noch nicht soooo schwierig war. Mal sehen, vielleicht kommen ja mal anspruchsvollere Codestückchen aus meiner Tastatur. Lasst mir noch'n bisschen Zeit dazu :-)

Das verstehe ich gut, drum posten wir ja beide unter Anfängerfragen :)

Schöne Grüße, Florian