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/