in reply to How to import names from a dynamically required module

if (eval "require $package_name; 1") { $package_name->import(qw/method1 method2 method3/); }

It's often a good idea to lift imports to compile-time using a BEGIN block.

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^2: How to import names from a dynamically required module
by jds17 (Pilgrim) on Oct 02, 2012 at 22:20 UTC
    Thank you very much, tobyink, I was not aware of the fact that one could call import on package names as in your example. This solved my issue.

      This is not specific to import; it works with all class method calls...

      use Math::BigInt; my $class = "Math::BigInt"; my $six = $class->new(6); my $seven = "Math::BigInt"->new(7); my $eight = join("::", "Math", "BigInt")->new(8);

      In fact, string quoting class names is arguably a much better idea than the more conventional Math::BigInt->new(9), because the latter will start behaving surprisingly if there's ever a BigInt sub defined in the Math package.

      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
        string quoting class names is arguably a much better idea
        Or, you can use Math::BigInt::->new(8).
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ