想象一下,我的脚本有这两个潜艇
sub with_json_mod{
use JSON::Tiny;
blah blah blah;
}
sub without_json_mod{
blah blah blah;
}
我只想在未安装without_json_mod
时使用JSON::Tiny
。
如果未安装JSON::Tiny
,我怎样才能使Perl失败,而是使用without_json_mod
sub?
我尝试在require
中调用with_json_mod
并且它似乎有效,但是当我尝试将其导入encode_json
子时它不起作用,如
sub with_json_mod{
require JSON::Tiny qw/encode_json/;
blah blah blah;
}
答案 0 :(得分:8)
那是因为您错误地调用了require
。
您需要的是:
require JSON::Tiny;
JSON::Tiny -> import ( 'encode_json' );
您也可以将其包装在'eval'中,并测试$@
的值:
eval { require JSON::Tiny; };
warn $@ if $@;
答案 1 :(得分:6)
use
和require
之间存在两个主要差异。
use
在编译时发生,require
在运行时发生。use
调用已加载包中的import()
方法(如果存在),而require
则不会。因此您需要添加对import()
的调用。
sub with_json_mod{
require JSON::Tiny;
JSON::Tiny->import('encode_json');
blah blah blah;
}