【发布时间】:2010-09-20 02:00:47
【问题描述】:
我有依赖Term::ReadKey 来获取终端宽度的 Perl 代码。我的安装缺少这个模块,所以如果模块不存在,我想提供一个默认值而不是抛出异常。
如何有条件地使用可选模块,而不提前知道它是否可用。
# but only if the module is installed and exists
use Term::ReadKey;
...
我怎样才能做到这一点?
【问题讨论】:
-
在我看来,要么是标题错误,要么所有答案(除了使用 Module::Load::Conditional 的答案,如果使用 check_install() 的话)都是错误的。标题询问如何检查“如果我有一个 Perl 模块在使用它之前”。所有答案都使用“使用 eval 检测错误,而需要/加载/使用它”的一些变体。
-
我考虑加载和使用 distinct。你可能不同意……
-
Perl 关键字
use具有非常特定的含义,因此我认为动词“使用”具有类似的特定含义。我不确定“加载”指的是什么......所以是的,我想我们会同意不同意;-) -
@EvanCarroll 您的答案很好,尽管它在功能上似乎与所选答案相同。但是有必要改变问题吗?如果我在 Google 上搜索“如何在 Perl 中检查我是否有一个模块,然后再使用它”,我不太可能搜索“在 Perl 中如何可以可选地需要一个模块”。而且我认为展示我默认的模块中的内容有助于获得严肃的答案,而不是“为了什么?”厘米。
-
@EvanCarroll 我了解有时您有一个问题,它会作为现有问题的副本而关闭。发生的频率超出了应有的程度。这并不意味着我的问题“不是问题”。您应该与审阅者一起讨论,或者在此处添加您的答案,注意它是另一种框架。