Für das EnOcean-Modul wurde beim Aufruf von CommandModify der alte %modules defptr-Zeiger bisher nicht gelöscht. Jetzt wird dies über EnOcean_Notify erledigt:
} elsif ($devName eq "global" && $s =~ m/^MODIFIED ([^ ]*)$/) {
# delete old DEF pointer in %modules
my ($key, $val);
my $modulesPointer = \%modules;
while (($key, $val) = each(%{$modulesPointer->{EnOcean}{defptr}})) {
if ($val == $hash && $key ne $hash->{DEF}) {
delete $modules{EnOcean}{defptr}{$key};
}
}
Wäre es nicht sinnvoller, dies in der Routine CommandModify selbst zu lösen, indem CallFn($a[0], "UndefFn", ... vor CallFn($a[0], "DefFn", ... aufgerufen würde? Für das EnOcean-Modul wäre m. E. die bessere Lösung. Ob es in anderen Modulen zu Problemen führt, kann ich nicht beurteilen.
Es geht viel gefahrloser, indem man im DefineFn auf das Vorhandensein von $hash->{OLDDEF} prueft, und anhand dieser Daten die notwendigen Schritte durchfuehrt.
Ein modify soll mehr als ein "delete+define" ermoeglichen, auch wenn das in vielen Faellen so gehandhabt wird.