Search code examples
perlerror-handlingperl-module

Custom missing module message


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.


Solution

  • 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...