http://qs321.pair.com?node_id=257638


in reply to URL linking within script

Move the four sub definitions to the top of your script and strict should stop complaining.

Update: Uhhh...okay, that was way off. What was I thinking?:P

I guess what you really need is a:

no strict "refs";

in there.

Sorry bout that...

Replies are listed 'Best First'.
Re: Re: URL linking within script
by chromatic (Archbishop) on May 13, 2003 at 05:10 UTC

    I downvoted this post because it's wrong. Please test your advice if you're not sure:

    #!/usr/bin/perl -w use strict; sub foo { print "foo\n" } my $f = 'foo'; &$f;

    I generally prefer a dispatch table:

    my %ops = ( one => \&one, two => \&two, ); my $op = $q->param( 'op' ); die "Invalid operation '$op'\n" unless exists $ops{ $op }; $subs{ $op }->();

    You can also mess with can, though it's less secure -- with the ops hash you can control exactly which subs can ever be called.

    my $op = $q->param( 'op' ); my $sub = __PACKAGE__->can( $op ); die "Invalid op '$op'\n" unless $sub; $sub->();