using a subroutine ref w/ strict refs

Wilson, Doug Doug_Wilson at intuit.com
Tue Oct 16 16:37:36 CDT 2001


~sdpm~

> > How would I do the following and ditch the "no strict 'refs'" line?

> > #!/usr/bin/perl
> > use strict;
> > my $command = $ARGV[0];
> >
> > no strict 'refs';
> > if ($command) {
> >    &$command;
> >    exit;
> > }
> >
> > sub say_hello {
> >     print "hello\n";
> > }
> >
> > sub AUTOLOAD {
> >     print "Invalid Sub\n"; exit;
> > }

First if you were going to use "no strict 'refs'",
it should go inside the 'if' block so that it has as
little scope as possible.

Second, depending on whether you want to restrict
what functions can be run or not,
you could create a subroutine dispatch like so:

my %subs = (
 say_hello=> \&say_hello,
 ....
);

if (my $cmd = $subs{$ARGV[0]}) {
 $cmd->();
} else {
 warn "Can't execute $ARGV[0]\n";
}

HTH,
-Doug
~sdpm~

The posting address is: san-diego-pm-list at hfb.pm.org

List requests should be sent to: majordomo at hfb.pm.org

If you ever want to remove yourself from this mailing list,
you can send mail to <majordomo at happyfunball.pm.org> with the following
command in the body of your email message:

    unsubscribe san-diego-pm-list

If you ever need to get in contact with the owner of the list,
(if you have trouble unsubscribing, or have questions about the
list itself) send email to <owner-san-diego-pm-list at happyfunball.pm.org> .
This is the general rule for most mailing lists when you need
to contact a human.




More information about the San-Diego-pm mailing list