SPUG: Subroutine references with "strict refs"
Dan Ebert
dan at enic.cc
Fri Oct 13 18:36:41 CDT 2000
Thanks, that seems to have done the trick.
At 03:15 PM 10/13/00 -0700, ced at carios2.ca.boeing.com wrote:
> > I am attempting to call a subroutine with the same name as the "action"
> > parameter. Here is the snip of code:
>
>
> > my $action = $in{action}; # $in{action} holds the value of the
> > "action" parameter from the form.
>
> > eval{ &$action; }; # error trap
> > if ( ! $@ ){
> > &$action;
> > }
> > else {
> > # do something with the error
> > }
>
> > This code works perfectly if I don't use strict; at the beginning of my
> > code, but if I use strict; I get this error:
>
> > Error: Can't use string ("remove") as a subroutine ref while "strict refs"
> > in use at ....
>
>
> > Any ideas? The only other way I come up with is using a "Dispatch table"
> > hash of parameter->references-to-subroutines (as described on p 54 of
> > O'Reilly's Advanced Perl Programing), but I'd rather not do that if
> possible.
>
>There's much to be said for the dispatch table, but if you
>don't mind a slower runtime eval and a bit of do-it-yourself
>laundering, this'll pass strict:
>
>#-- launder the hidden param; ** See perldoc perlsec **
>#-- explicitly allow only sub names
>
>unless ($action =~ /^(?:sub1|sub2|sub3|sub4)$/ ) {
> die "die evil sub passage....";
>}
>eval "&$action";
>if ( $@ ) {
> # do something with the error
>}
>
>
>hth,
>--
>Charles DeRykus
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
> Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
> Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
> For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
> Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
--------------------------------------------------
The nice thing about standards is that there are
so many of them to choose from.
- Andrew S. Tanenbaum
Dan Ebert <dan at enic.cc>
eNIC Corporation, www.enic.cc
--------------------------------------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
More information about the spug-list
mailing list