Ich habe die Nutzung von Instanzvariablen $hash->{var}{<varname>} etwas vereinfacht. Variablen, die mit $_ beginnen können als Instanzvariablen genutzt werden. Die Perl-Sondervariable $_ kann wie üblich im Perlcode trotzdem benutzt werden.
Was macht wohl dieses kleine Programmchen?
defmod di_var DOIF init {$_i=0}\
{if ([FS]) {set_Reading ("state",$_i++,1)}}
Im konventionellen DOIF nur umständlich über Readings mit setreading umsetzbar.
Edit:
Ebenso funktionieren hash-Variablen z.B.
$_betrag{heute}=100;
Die Instanzvariablen müssen nicht deklariert werden, sie sind am Anfang nicht definiert, wenn man sie nicht vorbelegt. Man kann sie abfragen, ob sie definiert sind z. B. mit if (defined $_...) ...
Ebenso lassen sich Instanzvariablen indizieren, z. B.:
my $i=0;
$_betrag{$i}=100;
Instanzvariablen überleben nicht den Neustart, sie können aber z.B. im init-Block aus Readings vorbelegt werden:
init {$_status=[?$SELF:state]}
oder einfach
init {$_status=ReadingsVal("$SELF","state",0)}