For all Reference syntax questions, bookmark Randal "merlyn" Schwartz's classic column "Show me your references" http://www.stonehenge.com/merlyn/UnixReview/col68.html
bill On Wed, Dec 11, 2013 at 2:42 PM, Morse, Richard E.MGH < [email protected]> wrote: > Thanks! That was the syntax that I was missing. > > Ricky > > On Dec 11, 2013, at 2:35 PM, Ben Martin <[email protected]> wrote: > > > You could always do: > > > > my $result = $test->(sub {$_}, @$list); > > > > the prototype is a convenient shortcut, but you can always just be > explicit. > > > > Cheers, > > Ben > > > > > > On Wed, Dec 11, 2013 at 2:26 PM, Morse, Richard E.MGH < > > [email protected]> wrote: > > > >> Hi! I'm having difficulty finding a place online which discusses this; > if > >> anyone has pointers (or an answer) I would appreciate it. > >> > >> I would like to do something like the following: > >> > >> use List::MoreUtils qw/any all/; > >> my $which = "any"; > >> my @list = (1, 0, 1); > >> my $subref; > >> if ($which eq 'any') { $subref = \&any; } > >> elsif ($which eq 'all') { $subref = \&all; } > >> > >> my $result = $subref { $_ } @list; > >> > >> The problem I have is how to call the referenced subroutine. Because > >> 'any' and 'all' use prototypes to get a block as the first parameter, > when > >> called via the reference, it tries to create an anonymous hash. I've > tried > >> several different things: > >> > >> my $result = $subref->({ $_ }, @list); > >> my $result = &{$subref} { $_ }, @list; > >> my $result = $subref {; $_ }, @list; > >> > >> and many variations thereof, but nothing seems to work. I get all sorts > of > >> ugly syntax errors. > >> > >> My eventual goal is to have something like: > >> > >> my $lookup = { > >> 'any' => \&any, > >> 'all' => \&all, > >> 'none' => \&none, > >> 'notall' => \¬all, > >> } > >> > >> if ( &{$lookup->{$test}} {$_} @$list ); > >> > >> Otherwise, I have to have an if-then-else (or given/when) structure, > and a > >> temporary variable, which is annoying... > >> > >> Thanks, > >> Ricky > >> > >> > >> The information in this e-mail is intended only for the person to whom > it > >> is > >> addressed. If you believe this e-mail was sent to you in error and the > >> e-mail > >> contains patient information, please contact the Partners Compliance > >> HelpLine at > >> http://www.partners.org/complianceline . If the e-mail was sent to you > in > >> error > >> but does not contain patient information, please contact the sender and > >> properly > >> dispose of the e-mail. > >> > >> > >> _______________________________________________ > >> Boston-pm mailing list > >> [email protected] > >> http://mail.pm.org/mailman/listinfo/boston-pm > >> > >> > > > _______________________________________________ > Boston-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/boston-pm > -- Bill @n1vux [email protected] _______________________________________________ Boston-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/boston-pm

