<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>