Try::Tiny is a good, if flaky option. It has several obscure failure modes.
You might want to look at some of the newer keyword based modules. I
haven't tried them yet, so I don't have a strong opinion.

On Fri, Nov 17, 2017, 13:45 Simon Reinhardt <si...@keinstein.org> wrote:

> 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 <si...@keinstein.org
> > <mailto:si...@keinstein.org>> 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: beginners-unsubscr...@perl.org
> >     <mailto:beginners-unsubscr...@perl.org>
> >     For additional commands, e-mail: beginners-h...@perl.org
> >     <mailto:beginners-h...@perl.org>
> >     http://learn.perl.org/
> >
> >
>
> --
> To unsubscribe, e-mail: beginners-unsubscr...@perl.org
> For additional commands, e-mail: beginners-h...@perl.org
> http://learn.perl.org/
>
>
>

Reply via email to