仅在子例程中需要时才使用 Perl 模块
Use Perl module only when it is needed within a subroutine
假设我的脚本有这两个子
sub with_json_mod{
use JSON::Tiny;
blah blah blah;
}
sub without_json_mod{
blah blah blah;
}
我只想在未安装 JSON::Tiny
时使用 without_json_mod
。
如果没有安装 JSON::Tiny
而是使用 without_json_mod
sub,我怎样才能使 Perl 不失败?
我尝试在 with_json_mod
中调用 require
并且它似乎可以工作,但是当我尝试使其导入 encode_json
sub 时它不起作用
sub with_json_mod{
require JSON::Tiny qw/encode_json/;
blah blah blah;
}
那是因为你调用 require
不正确。
您需要的是:
require JSON::Tiny;
JSON::Tiny -> import ( 'encode_json' );
您也可以将其包装在 'eval' 中,并测试 $@
:
的值
eval { require JSON::Tiny; };
warn $@ if $@;
use
和 require
之间有两个主要区别。
use
发生在编译时,require
发生在运行时。
use
调用加载包中的 import()
方法(如果存在)而 require
不调用。
因此您需要添加对 import()
的调用。
sub with_json_mod{
require JSON::Tiny;
JSON::Tiny->import('encode_json');
blah blah blah;
}
假设我的脚本有这两个子
sub with_json_mod{
use JSON::Tiny;
blah blah blah;
}
sub without_json_mod{
blah blah blah;
}
我只想在未安装 JSON::Tiny
时使用 without_json_mod
。
如果没有安装 JSON::Tiny
而是使用 without_json_mod
sub,我怎样才能使 Perl 不失败?
我尝试在 with_json_mod
中调用 require
并且它似乎可以工作,但是当我尝试使其导入 encode_json
sub 时它不起作用
sub with_json_mod{
require JSON::Tiny qw/encode_json/;
blah blah blah;
}
那是因为你调用 require
不正确。
您需要的是:
require JSON::Tiny;
JSON::Tiny -> import ( 'encode_json' );
您也可以将其包装在 'eval' 中,并测试 $@
:
eval { require JSON::Tiny; };
warn $@ if $@;
use
和 require
之间有两个主要区别。
use
发生在编译时,require
发生在运行时。use
调用加载包中的import()
方法(如果存在)而require
不调用。
因此您需要添加对 import()
的调用。
sub with_json_mod{
require JSON::Tiny;
JSON::Tiny->import('encode_json');
blah blah blah;
}