From 79e5e503a18086b1d1b286f4474cbc4fe35e9c6c Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Sat, 4 Jul 2020 08:39:51 +0000 Subject: [PATCH] fhem.pl: add array and hash to AnalyzePerlCommands (Forum #112356) git-svn-id: https://svn.fhem.de/fhem/trunk@22342 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/fhem.pl | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 4b7c47d49..3eda1f34b 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -1136,15 +1136,13 @@ AnalyzePerlCommand($$;$) my $we = IsWe(undef, $wday); if($evalSpecials) { - $cmd = join("", map { my $n = substr($_,1); # ignore the % - my $v = $evalSpecials->{$_}; - $v =~ s/(['\\])/\\$1/g; - "my \$$n='$v';"; - } keys %{$evalSpecials}) - . $cmd; - # Normally this is deleted in AnalyzeCommandChain, but ECMDDevice calls us - # directly, and combining perl with something else isnt allowed anyway. - $evalSpecials = undef if(!$calledFromChain); + $cmd = join("", map { + my $n = substr($_,1); # ignore the legacy % + my $ref = ref($evalSpecials->{$_}); + $ref eq "ARRAY" ? "my \@$n=\@{\$evalSpecials->{'$_'}};" : + $ref eq "HASH" ? "my \%$n=\%{\$evalSpecials->{'$_'}};" : + "my \$$n= \$evalSpecials->{'$_'};"; + } sort keys %{$evalSpecials}) . $cmd; } $cmdFromAnalyze = $cmd; @@ -1153,6 +1151,10 @@ AnalyzePerlCommand($$;$) $ret = $@; Log 1, "ERROR evaluating $cmd: $ret"; } + + # Normally this is deleted in AnalyzeCommandChain, but ECMDDevice calls us + # directly, and combining perl with something else isnt allowed anyway. + $evalSpecials = undef if(!$calledFromChain); $cmdFromAnalyze = undef; return $ret; }