Joh*_*Loo 1 perl perl-module require
想象一下,我的脚本有这两个子
sub with_json_mod{
use JSON::Tiny;
blah blah blah;
}
sub without_json_mod{
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)
我只想without_json_mod在JSON::Tiny没有安装时使用.
如果JSON::Tiny没有安装,我如何使Perl不失败,而是使用without_json_modsub代替?
我试着打电话给require在with_json_mod和它似乎工作,但是当我试着让它导入它不起作用encode_json子在
sub with_json_mod{
require JSON::Tiny qw/encode_json/;
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)
那是因为你打电话require不对.
你需要的是:
require JSON::Tiny;
JSON::Tiny -> import ( 'encode_json' );
Run Code Online (Sandbox Code Playgroud)
您也可以将其包装在'eval'中,并测试以下值$@:
eval { require JSON::Tiny; };
warn $@ if $@;
Run Code Online (Sandbox Code Playgroud)
use和之间有两个主要区别require.
use在编译时require发生并在运行时发生.use调用import()加载包中的方法(如果存在),require但不调用.所以你需要添加一个电话import().
sub with_json_mod{
require JSON::Tiny;
JSON::Tiny->import('encode_json');
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)