http://www.perlmonks.org?node_id=664900

pseudomonas has asked for the wisdom of the Perl Monks concerning the following question:

Wise Monks: I'm using XML::Twig and its function handlers. These take coderefs, to which are passed (as @_) the values of the twig and the section being processed. However, if I want to pass the coderef other values as well, it doesn't seem to retrieve the twig and section as I'd expect. I'm a bit stumped, I can't seem to find this case in the documentation. Example:
#!/usr/bin/perl use XML::Twig; my $t=XML::Twig->new( twig_handlers => { name => \&my_s }); $t->parse('<doc><name>Alice</name><name>Bob</name></doc>'); sub my_s { my ($twig, $section, $greeting) = @_; print $greeting || "Hello" , ", ", $section->text(), "!\n"; } # Yields: # Hello, Alice! # Hello, Bob!
If I try
my $t=XML::Twig->new( twig_handlers => { name => \&my_s("Hi") }); # Can't call method "text" on an undefined value # likewise with &my_s->("Hi")
What am I missing?