[Omaha.pm] ignoring undefined subroutines

Hugh Jarce hjarce2001 at yahoo.com
Wed Sep 8 04:57:17 CDT 2004


Terry wrote:
> I want to ignore undefined subroutines.  Right now, my collection of
> text ( not worthy of being called a perl script ) calls subroutines
> but I want it to NOT die when it comes across a subroutine that is
> not defined.  How can I do this?   For example:
>
> &{"header_$who"};
>
> if $who is not defined or contains a goofy value, my script dies,
> I do not want this.

Jay's AUTOLOAD seems a good solution. However, because variety is the
spice of life, here are two different approaches:

sub header_hugh { print "in hugh\n" }
for my $who ( 'dummy', 'hugh' ) {
    eval { &{"header_$who"} };
    print "$who died\n" if $@;
}

which simply traps die with eval. Notice that this will also catch
_any_ die inside the called routine (I suppose you could tell the
difference by examining the contents of $@) which may be a bug
or a feature depending on your needs.

Alternatively, you might peek at the symbol table before attempting
to call the function (if you knew which package it was defined in).
For example:

use strict;
sub header_hugh { print "in hugh\n" }
for my $who ( 'dummy', 'hugh' ) {
    if (exists($main::{"header_$who"})) {
        &{$main::{"header_$who"}};
    } else {
        print "no such function $who\n";
    }
}

Hugh.



		
__________________________________
Do you Yahoo!?
Yahoo! Mail - You care about security. So do we.
http://promotions.yahoo.com/new_mail


More information about the Omaha-pm mailing list