use
5.006;
our
$VERSION
= 0.51_01;
sub
import
{
my
$class
=
shift
;
my
$of
=
shift
;
my
$args
= [
@_
];
if
(
$of
ne
'of'
) {
unshift
@$args
,
$of
;
}
my
$caller
=
caller
();
foreach
my
$arg
(
@$args
) {
my
$modules
= _find_modules(
$arg
);
foreach
my
$module
(
@$modules
) {
my
$package
=
$module
->{ module };
eval
{
require
$module
->{ path };
$package
->
import
;
};
if
($@) {
warn
( $@ );
}
}
}
1;
}
sub
_find_modules {
my
$module
=
shift
;
my
$moduledir
= _module_to_file(
$module
);
my
$list
= [];
foreach
my
$incdir
(
@INC
) {
next
if
ref
$incdir
;
my
$dir
= File::Spec->catfile(
$incdir
,
$moduledir
);
next
unless
-d
$dir
;
my
@files
= ();
File::Find::find({
wanted
=>
sub
{
return
unless
$File::Find::name
=~ /\.pm$/;
push
@files
,
$File::Find::name
;
},
no_chdir
=> 1,
},
$dir
);
foreach
my
$absfile
(
@files
) {
my
$relfile
= File::Spec->abs2rel(
$absfile
,
$incdir
);
push
@$list
, {
path
=>
$relfile
,
module
=> _file_to_module(
$relfile
)
};
}
}
return
$list
;
}
sub
_file_to_module {
my
$file
=
shift
;
$file
=~ s/\.pm$//;
my
@list
= File::Spec->splitpath(
$file
);
shift
@list
;
return
join
(
'::'
,
@list
)
}
sub
_module_to_file {
my
$module
=
shift
;
$module
=~ s{::\*?$}{};
$module
=~ s{::}{/}g;
return
$module
;
}
1;