This is probably the best technique to use. I would note that your code is
not handling exceptions in the safest way.
You can increase the safety of your code by saying:
eval {
autoload($module);
1; #force true value on success
} or do {
if ($@ =~ /Compilation failed in require/) {
say "compilation failed";
}
elsif ($@ =~ /Can't locate (.*) in \@INC/) {
say "module $1 not found";
} else {
say "unknown error: $@"
};
This isn't 100% safe, but it covers the most common issue. You can read
more at https://metacpan.org/pod/Try::Tiny#BACKGROUND
On Fri, Nov 17, 2017 at 11:31 AM Simon Reinhardt <[email protected]>
wrote:
> Hi list,
>
> I need to check the cause of a module loading error.
> Currently I'm parsing the text of the thrown exception (see below). This
> seems to work, but is there a more idiomatic way?
>
> Best,
> Simon
>
> #!/usr/bin/env perl
> use 5.020;
> use warnings;
> use strict;
>
> use Module::Load;
>
> my $module= 'AB::CD';
>
> eval {
> autoload($module);
> };
>
> if ($@) {
> if ($@ =~ /Compilation failed in require/) {
> say "compilation failed";
> }
> elsif ($@ =~ /Can't locate .* in \@INC/) {
> say "module not found";
> }
> }
>
> --
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> http://learn.perl.org/
>
>
>