简体   繁体   中英

How can I conditionally import a package in Perl?

I have a Perl script which uses a not-so-common module, and I want it to be usable without that module being installed, although with limited functionality. Is it possible?

I thought of something like this:

my $has_foobar;
if (has_module "foobar") {
    << use it >>
    $has_foobar = true;
} else {
    print STDERR "Warning: foobar not found. Not using it.\n";
    $has_foobar = false;
}

You can use require to load modules at runtime, and eval to trap possible exceptions:

eval {
    require Foobar;
    Foobar->import();
};  
if ($@) {
    warn "Error including Foobar: $@";
}

See also perldoc use .

考虑if pragma。

 use if CONDITION, MODULE => ARGUMENTS; 

I recommend employing Module::Load so that the intention is made clear .

Edit: disregard the comments, Module::Load is in core .

Another approach is to use Class::MOP's load_class method. You can use it like:

Class::MOP::load_class( 'foobar', $some_options )

It throws an exception so you'll have to catch that. More info here .

Also, while this isn't necessarily on every system Class::MOP is awfully useful to have and with Moose becoming more prevalent every day it likely is on your system.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM