Thanks for your answer.
Maybe I should use Try::Tiny:
#!/usr/bin/env perl
use 5.020;
use warnings;
use strict;
use Try::Tiny;
use Module::Load;
my $module= 'AB::CD';
try {
autoload($module);
}
catch {
if ($_ =~ /Compilation failed in require/) {
say "compilation failed";
}
elsif ($_ =~ /Can't locate .* in \@INC/) {
say "module not found";
}
};
Am 17.11.2017 um 18:06 schrieb Chas. Owens:
> 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]
> <mailto:[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]
> <mailto:[email protected]>
> For additional commands, e-mail: [email protected]
> <mailto:[email protected]>
> http://learn.perl.org/
>
>
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/