my $foo = Foo->new qw( Foo::Bar Foo::Baz ); #### my @submodules = @_; for ( @submodules ) { eval "require $_" || die "$!"; } #### my $foo = Foo->new qw( Bar Baz ); #### for ( @submodules ) { eval "require Foo::$_" || die "$!"; } #### package Foo; sub new { my $class = shift; my @submodules = @_; for ( @submodules ) { eval "require $_" || die "$@"; } bless { submodules => \@submodules }, $class; } 1; #### package Foo::Bar; sub details { return { name => 'Simon', job => 'doctor', }; } 1; #### #!/usr/bin/perl use Foo; my $foo = Foo->new qw(Foo::Bar Foo::Baz ); for ( @{ $foo->{'submodules'} } ) { print $_->details->{'name'} . " is a " . $_->details->{'job'} . $/; } # prints: Simon is a doctor #### package Foo; sub new { my $class = shift; my @submodules = @_; for ( @submodules ) { eval "require Foo::$_" || die "$@"; } bless { submodules => \@submodules }, $class; } 1; #### package Foo::Bar; sub details { return { name => 'Simon', job => 'doctor', }; } 1; #### #!/usr/bin/perl use Foo; my $foo = Foo->new qw( Bar ); for ( @{ $foo->{'submodules'} } ) { print $_->details->{'name'} . " is a " . $_->details->{'job'} . $/; } # prints: Can't locate object method "details" via package "Bar" # (perhaps you forgot to load "Bar"?)