仅在子例程中需要时才使用 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 $@;

userequire 之间有两个主要区别。

  1. use 发生在编译时,require 发生在运行时。
  2. use 调用加载包中的 import() 方法(如果存在)而 require 不调用。

因此您需要添加对 import() 的调用。

sub with_json_mod{
    require JSON::Tiny;
    JSON::Tiny->import('encode_json');
    blah blah blah;
}