use strict;
use warnings;
use Data::Dumper;
package Foo;
1;
package main;
print "Data::Dumper was ", defined $Data::{'Dumper::'} ? "loaded\n" :
+"not loaded\n";
print "Foo was ", defined $::{'Foo::'} ? "loaded\n" : "not loaded\n";
print "Eata::Dumper was ", defined $Eata::{'Dumper::'} ? "loaded\n" :
+"not loaded\n";
# Here's a false positive!
# "Data::Dumper" was loaded, and that makes it look like
# "Data" has also been loaded...
#
print "Data was ", defined $::{'Data::'} ? "loaded\n" : "not loaded\n"
+;
# Here's another false positive!
# When we checked if "Eata::Dumper" was loaded,
# autovivification makes it look like "Eata" was loaded.
#
print "Eata was ", defined $::{'Eata::'} ? "loaded\n" : "not loaded\n"
+;
It's much better to check for the existence of the actual functions/methods you wish to use:
my $Dumper = UNIVERSAL::can('Data::Dumper', 'can')
&& 'Data::Dumper'->can('Dumper');
print $Dumper->($hashref) if defined $Dumper;
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
|