Hi David.

How about importing mysub from Foo::Bar to Foo, and let Exporter to deal with the next step?


package Foo;

use Foo::Bar qw{mysub};

our @EXPORT = qw{ mysub };


should work.


Shmuel.



On 2011/01/16 22:03, David Christensen wrote:

module-authors:

Let's say I have a CPAN distribution called Foo:

    # Foo.pm

    package Foo;

And suppose the distribution includes:

    package Foo::Bar;

    sub mysub { print "hello, world!\n" }

I would like callers to be able to import mysub() with a traditional 'use' statement and import list:

    #!/usr/bin/perl
    # myscript.pl

    use strict;
    use warnings;

    use Foo        qw( mysub );

    mysub();


If mysub() were in Foo, I would know how to accomplish the goal with Exporter, @Foo::Export_OK, etc.. But because mysub() is in Foo::Bar, I don't think the traditional approach will work. RTFM Exporter makes me wonder if I should write Foo::import() and call Exporter::export_to_level() (?).


Bonus question:

    use Foo        qw( :all );


What is the best way to accomplish the goal?


TIA,

David


p.s. My motivation for this question is as follows -- I am writing some exception throwing code that calls Carp::confess() internally and would like to apply the %Carp::Internal feature so that the error messages the user sees start at the point where they called my code, not where my code calls confess(). I don't what to put my whole distribution package into %Carp::Internal, so I'm thinking I'll put the throwing subroutines into their own package and put that package name into %Carp::Internal.



Reply via email to