Pregunta

Soy mono parcheando un paquete usando una técnica dada al comienzo de " ¿Cómo puedo parchear un método de instancia en Perl? " . El problema con el que me estoy encontrando es que la subrutina original usó una variable my a nivel de paquete a la que la subrutina parcheada parece no tener acceso, ya sea por la especificación de ruta completa o el uso implícito.

¿Hay alguna forma de obtener los datos con alcance de esta manera para usarlos en la subrutina parcheada?

¿Fue útil?

Solución

Puede obtener léxicos con el módulo PadWalker . Mal, pero funciona.

Otros consejos

No. En lo que te equivocas es que no tienen un alcance de paquete. Una variable léxica está, por definición, limitada a su alcance léxico, en otras palabras, el bloque en el que se encuentra.

Los léxicos (es decir, declarados con 'mi') no son visibles fuera del alcance léxico (archivo o bloque) en el que se declaran. Ese es el objetivo de las variables léxicas.

Si hay una subrutina / método que está en el mismo alcance que la var léxica, entonces puede devolver el valor de la léxica y eso puede permitir el acceso indirecto a la var desde fuera de su alcance.

No existe una 'especificación de ruta completa' para las variables léxicas. Eso es para las variables del paquete. Si la var fue declarada con 'nuestro' en lugar de 'mi', podría hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top