<div dir="ltr"><div>I am simplifying my perl plugin code (a lot). Of course i still run several different instances of the code, still, because i monitor several devices. </div><div><br></div><div>The somewhat magic code for creating a unique read callback stopped working. This is the current code, that give me the error</div><div>Collectd::Plugins::OneWireCtlr::my_read_192_168_178_117 error: Undefined subroutine &Collectd::Plugins::OneWireCtlr::HASH called at (eval 16) line 1.</div><div><br></div><div><br></div><div>sub my_config {</div><div>  # </div><div>  # get stuff from the config file</div><div>  #</div><div>  my ( undef, $config_href ) = recurse_config($_[0]);</div><div>  my_die("What host to monitor? i need an IP!") </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>unless $config_href->{'host'};</div><div>  my $host = $config_href->{'host'};</div><div><br></div><div>  my ($string) = map tr/a-zA-Z0-9_/_/csr, $host;</div><div>   </div><div>  # register "personalized" callback</div><div>  eval "sub Collectd::Plugins::OneWireCtlr::my_read_$string {my_read($config_href);}";</div><div>  plugin_register (TYPE_READ, "$plugin_name/$string", "my_read_$string");</div><div><br></div><div>  init_controller( $config_href,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>[  'set,sys,datatime,0',</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>   'set,sys,kalsend,0',</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>   'set,sys,dataprint,0',</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>   'set,owb,owdid,1',</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>   'set,sys,kalrec,0',</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>   'SET,OWB,POLLTIME,10'</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>] );</div><div><br></div><div>  1;</div><div>}</div><div><br></div><div><br></div><div>This is the old code that used to work:</div><div><br></div><div>sub my_config {</div><div>  # </div><div>  # get stuff from the config file</div><div>  #</div><div>  my ( undef, $config_href ) = recurse_config($_[0]);</div><div>  my_die("What host to monitor? i need an IP!") </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>unless $config_href->{'host'};</div><div>  my $host = $config_href->{'host'};</div><div><br></div><div>   </div><div>  my $glue = substr( crypt ( (scalar reverse $host), $host), -4); # get reproducable 4 bytes</div><div><br></div><div>  my ($string) = map tr/a-zA-Z0-9_/_/csr, $host;</div><div>#   print "string $string  host $host glue $glue\n";</div><div><br></div><div>  my %options = (</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>create   => 1,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>exclusive => 0,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>mode    => 0644,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>destroy  => 1,</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>);</div><div>  my %values;   </div><div>  my $handle = tie %values, 'IPC::Shareable', $glue, { %options } or my_log("shared memory: tie failed");</div><div><br></div><div>  #</div><div>  # configure the controller</div><div>  #</div><div><br></div><div>  my @c = ($config_href, \%values);   </div><div>  # register "personalized" callback</div><div>  eval "sub Collectd::Plugins::OneWireCtlr::my_read_$string {my_read(\@c);}";</div><div>  plugin_register (TYPE_READ, "$plugin_name/$string", "my_read_$string");</div><div><br></div><div>  unless ($child = fork) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>my_die( "cant fork: $!") unless defined $child;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span># this is the part communicating with the controller</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>communicate(\@c);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span># Not reached</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>exit;</div><div>  }</div><div>  1;</div><div>}</div><div><br></div><div><br></div><div><br></div><div>how do i fix this? what is the actual problem?</div></div>