【发布时间】:2021-03-03 05:59:56
【问题描述】:
如果我想编写可选地使用模块的代码,我该怎么做?例如,如果我想编写 warns 转储对象的代码,如果 Data::Dumper 可用,或者只有 warns,我该怎么做?
【问题讨论】:
-
这个问题不应该作为重复而关闭,因为这个问题有两个部分。 1. 如何选择性地加载模块 2. 如何选择性地使用子程序。
-
#2 的答案是这样的。
use constant haveDumper => defined &Dumper; sub warning { haveDumper ? warn(Dumper @_) : warn(@_); }检查子程序是否可用的一般方法是defined &NAME。这很重要,因为子程序可以由各种模块提供。如果您需要检查自动加载的子例程,请使用exists &NAME。