On 2011-06-09 23:46, John SJ Anderson wrote:
On Thu, Jun 9, 2011 at 17:42,<sono...@fannullone.us> wrote:
Using either require, use, or do produces an error if I run the script without
the module. Is there a specific function for this purpose, or would I have to
do something like wrap a 'use' or 'require' in an if statement? I've tried
that and it doesn't work so maybe I'm way off base on that one.
Something like:
my $module_is_enabled = 0;
eval 'use My::Special::Module';
$module_is_enabled = 1 unless $@;
should do what you're looking for.
It is wrong to test on $@ like that, even only because it is a global
variable.
In stead, you should test the return value of the eval.
For example like this:
perl -wle '
my @loaded;
my %error;
my @modules = qw/ My::Data::Dumper Data::Dumper His::Data::Dumper /;
for my $module ( @modules ) {
eval qq{use $module; push \@loaded, \$module; 1}
or do {
my $eval_error = $@ || "Zombie error!";
( $error{ $module } = $eval_error ) =~ s/ \(.*//s;
};
}
print "OK:", Dumper( \@loaded );
print "ERROR:", Dumper( \%error );
'
which prints:
OK:$VAR1 = [
'Data::Dumper'
];
ERROR:$VAR1 = {
'His::Data::Dumper' => 'Can\'t locate His/Data/Dumper.pm in @INC',
'My::Data::Dumper' => 'Can\'t locate My/Data/Dumper.pm in @INC'
};
And don't forget to check out the several plugin modules on CPAN!
See for example how Template::Plugin works.
--
Ruud
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/