On Saturday 31 Oct 2009 02:38:11 Steve Bertrand wrote:
> Steve Bertrand wrote:
> > Hi all,
> >
> > Within a CGI environment, I'm trying to do a dispatch table test, but
> > can't figure out how to call the coderef as a method. Here is the
> > working code. I'll describe what doesn't work afterwards:
> >
> > sub perform_find {
> >
> > my $self = shift;
> >
> > my $find_this = $self->query->param( 'find_this' );
> > my $search_data = $self->query->param( 'search_data' );
> >
> > my %find_commands = (
> >
> > # call by local function
> > plan_by_id => \&_find_plan_by_id,
> > );
> >
> > # and pass in $self explicitly
> > $find_commands{ $find_this }( $self, $search_data );
> > }
> >
> > __END__
> >
> > Things progress properly using the above. What I don't understand, is
> > why I have to pass in $self as a param to the dispatch table. What
> > didn't work is this:
> >
> >
> > sub perform_find {
> >
> > my $self = shift;
> >
> > my $find_this = $self->query->param( 'find_this' );
> > my $search_data = $self->query->param( 'search_data' );
> >
> > my %find_commands = (
> >
> > # I'm trying to call the method on myself
> > plan_by_id => \&{ $self->_find_plan_by_id },
> > );
> >
This should probably be: (untested)
<<<<
plan_by_id => sub { return $self->_find_plan_by_id(@_); },
>>>>
See:
* http://perl-begin.org/tutorials/perl-for-newbies/part3/#page--
refs_to_funcs--DIR
(Sorry for the broken URL)
* http://www.shlomifish.org/lecture/Perl/Newbies/lecture3/refs_to_funcs/
(Same resource - only as multiple pages).
> > # ...obj passed in implicitly as expected
> > $find_commands{ $find_this }( $search_data );
This should be:
{{{
$find_commands{$find_this}->($search_data)
}}}
Regards,
Shlomi Fish
--
-----------------------------------------------------------------
Shlomi Fish http://www.shlomifish.org/
"The Human Hacking Field Guide" - http://shlom.in/hhfg
Chuck Norris read the entire English Wikipedia in 24 hours. Twice.
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/