Perl monkey-patching是否允许您查看修补程序包的范围?

时间:2009-01-23 21:56:39

标签: perl scope packages monkeypatching

我正在使用"How can I monkey-patch an instance method in Perl?"开头给出的技术修补包。我遇到的问题是原始子例程使用了包级别my变量,修补后的子例程似乎无法访问,无论是通过完整路径规范还是隐式使用。

有没有办法以这种方式获取用于修补子例程的数据范围?

3 个答案:

答案 0 :(得分:7)

您可以使用PadWalker模块获取词汇。邪恶,但它有效。

答案 1 :(得分:5)

没有。你错误的是它们包作用域。根据定义,词汇变量仅限于其词汇范围,换句话说,它所在的块。

答案 2 :(得分:0)

Lexicals(即:声明为'my')在声明它们的词法范围(文件或块)之外是不可见的。这就是词汇变量的全部要点。

如果有一个与lexical var在同一范围内的子例程/方法,则它可以返回词法的值,并且可以允许从其范围之外间接访问var。

对于词汇变量,没有“完整路径规范”这样的东西。这是包变量。如果var声明为'our'而不是'my',那么你可以这样做。