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/ > > >