http://www.perlmonks.org?node_id=410045


in reply to Re^2: Using import to generate subroutines
in thread Using import to generate subroutines

An AUTOLOAD for dbms_random_random has no (easy) way to figure out if it is supposed to call dbms_random.random or dbms.random_random.

Well actually you have the same problem if you are exporting functions with the added disadvantage of tons of redundant code.

sub AUTOLOAD { my ( undef, $funcname ) = split '::', $AUTOLOAD; my $mapping = { foo => 'foo.bar', bar => 'foobar', }; if ( exists $mapping->{$funcname} ) { # exec $mapping->{$funcname} } else { die "Can't do $funcname, NFI how to!\n"; } }

cheers

tachyon

Replies are listed 'Best First'.
Re^4: Using import to generate subroutines
by Thilosophy (Curate) on Nov 24, 2004 at 05:26 UTC

    I said: An AUTOLOAD for dbms_random_random has no (easy) way to figure out if it is supposed to call dbms_random.random or dbms.random_random.

    You said: Well actually you have the same problem if you are exporting functions with the added disadvantage of tons of redundant code.

    I think I could get around the naming problem by explicitly exporting subroutines (and not using AUTOLOAD)

    use MyProcedures qw (dbms_random.random ); # this creates: sub CallingPackage::dbms_random_random { # call dbms_random.random in the database }

    So the subroutine you get has actually a different name than what you asked for, which admittedly is a bit strange.

    I do not get the part about the "tons of redundant code". The subroutines are only created when imported, and they are very slim (just one peppered subroutine call each).

    I put the module in my scratchpad if you want to have a look. Unless it turns out to be totally flawed I want to publish it to CPAN this week.