perl - 如何检查perl模块是否可用?

标签 perl module namespaces package

我找到了 this :

my $rc = eval
{
  require Term::ReadKey;
  Term::ReadKey->import();
  1;
};

if($rc)
{
  # Term::ReadKey loaded and imported successfully
  ...
}

但这不适用于在其他模块中定义的包,例如:

{
  package Hi::Test;
}    

my $rc =  eval{ require Hi::Test };

$rc 在这里是假的。

如何检查“Hi::Test”是否可用?

最佳答案

我假设该包中确实发生了一些事情,而不仅仅是一个空 block 。

以下代码检查该包的符号表中是否有任何条目。它很脏,但只要注册了 sub 或包变量,它就可以工作。

{
  package Hi::Test;

  sub foo;
}

my $rc =  eval{ require Hi::Test };
if (! $rc) {
  $rc = do {
    no strict;
    *stash = *{"Hi::Test::"};
    scalar keys %stash;
  }
}

print $rc;

它将打印1

关于perl - 如何检查perl模块是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608504/

相关文章:

json - 在 Perl 中加速 JSON 解析

python - 在 python 脚本中加载环境模块

import - 在 Julia 中创建共享模块的推荐方法是什么?

perl - 如何测试独立的 Perl 脚本?

php - 只有类需要全局命名空间前缀吗?

perl - 安装 perl 模块时如何运行配置脚本?

perl - 使用Perl按点分割

perl - 创建一个哈希字符串=>列表列表,我做错了什么?

reactjs - browserify 和 babel 命名空间错误 React

c# - VB.NET命名空间缩写: How do I make this work in equivalent C# code?