3

我正在使用“如何在 Perl 中对实例方法进行猴子修补?”开头给出的技术对包进行修补。. 我遇到的问题是原始子例程使用了一个包级my变量,修补后的子例程似乎无法通过完整路径规范或隐式使用访问该变量。

有什么方法可以获取以这种方式限定范围的数据,以便在修补的子例程中使用?

4

3 回答 3

7

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

于 2009-01-23T23:11:17.717 回答
5

不,您误会的是它们不是包范围的。根据定义,词法变量仅限于其词法范围,换句话说,就是它所在的块。

于 2009-01-23T22:13:51.530 回答
0

词法(即:用'my'声明)在声明它们的词法范围(文件或块)之外是不可见的。这就是词法变量的全部意义所在。

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

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

于 2009-01-29T03:42:51.307 回答