I would like to be able to output a custom error message to STDERR if one of my modules cannot be found.
From what I understand if I import the module with the use command the lack of the module will be discovered prior to my script being executed which poses a significant problem to achieving the result that I am looking for.
Basically what I am looking for is a Perl equivalent of catching the ImportError exception in Python.
To catch an exception in Perl you should use the eval
operator. If the code passed to eval
dies, then the error message is put into $@
instead for you to use however you like.
It would look something like this
use strict;
use warnings;
use 5.010;
BEGIN {
eval 'use Xyz';
if ( $@ ) {
if ( $@ =~ /Can't locate (\S+)/ ) {
warn "$1 isn't installed";
}
else {
die $@;
}
}
}
say 'Continuing...';
output
Xyz.pm isn't installed at E:\Perl\source\trap use.pl line 9.
Continuing...
You can use an @INC
hook to do this:
BEGIN { push @INC, sub { Carp::croak "Couldn't find $_[1]" } }
use Xyz;