I need to determine if a package is loaded. The only way I can see to do that is to look through %::
As an example, if I wanted to find out if FindBin was loaded. I could do this...
if (grep { /\AFindBin::\z/ } keys %::) {
print "FindBin is loaded\n";
}
Is this the proper way to do this? Is there a better way?
UPDATE:
Thanks, this seems to work using %INC
$ cat x
use strict;
use warnings;
use FindBin;
use File::Basename;
is_loaded('FindBin');
is_loaded('Data::Dumper');
is_loaded('File::Basename');
sub is_loaded {
my ($pkg) = @_;
(my $file = $pkg) =~ s/::/\//g;
$file .= '.pm';
my @loaded = grep { $_ eq $file } keys %INC;
print "package $pkg is " . (@loaded ? '' : 'NOT ') . "loaded\n";
return
}
$ perl x
package FindBin is loaded
package Data::Dumper is NOT loaded
package File::Basename is loaded