use Foo qw(Bar Baz); #### use Foo (); use Foo::Bar (); use Foo::Baz (); #### my @module = qw(Bar Baz); # allowable modules my %module = map {$_ => 1} @module; # easy lookup of modules sub import { my $class = shift; return if $class ne 'Foo'; # allow import to be inherited by submodules my @require; # list of modules to be required if (@_) { foreach (@_) { if ($_ eq ':all') { @require = @module; } elsif ($module{$_}) { push @require,$_; } else { warn "Don't know how to load Foo::$_\n"; } } } else { @require = @module; } foreach (@require) { next if eval "require Foo::$_;"; # string eval for easiness warn "Foo::$_: $@"; # could be die also if you prefer } } #import