有没有办法告诉软件包启用了哪些功能?

Eva*_*oll 1 perl metaprogramming pragma package

假设我想确保实现接口的人具有特定的实验性功能,

package Foo {
  use experimental "signatures";

}
Run Code Online (Sandbox Code Playgroud)

有没有办法确定 Foo 启用了哪些功能,或者更具体地说是“实验性功能”?

Gri*_*nnz 7

不,因为 Foo 没有启用功能;功能与词法范围相关,而不是包。

在该词法范围内或从该词法范围调用的代码理论上可以使用来自caller的hinthash 返回值测试启用的功能,但该值本质上是未记录的内部结构。来自该范围之外的代码必须使用PadWalker 之类的东西

如果您只想检查某些文件中是否存在特定功能,更好的方法是编写 perlcritic 规则。