Позволяет ли Perl-обезьянье исправление увидеть область действия исправленного пакета?

StackOverflow https://stackoverflow.com/questions/474763

Вопрос

Я как обезьяна исправляю пакет, используя технику, описанную в начале «Как я могу исправить метод экземпляра в Perl?».Проблема, с которой я столкнулся, заключается в том, что исходная подпрограмма использовала функцию уровня пакета. my переменная, к которой исправленная подпрограмма не имеет доступа ни при указании полного пути, ни при неявном использовании.

Есть ли способ получить данные, ограниченные таким образом, для использования в исправленной подпрограмме?

Это было полезно?

Решение

Вы можете получить лексику с помощью модуля PadWalker . Зло, но это работает.

Другие советы

Нет.Вы ошибаетесь в том, что они нет область действия пакета.Лексическая переменная по определению ограничена своей лексической областью действия, другими словами, блоком, в котором она находится.

Лексики (т.е.:объявленные с помощью «my») не видны за пределами лексической области видимости (файла или блока), в которой они объявлены.В этом вся суть лексических переменных.

Если существует подпрограмма/метод, который находится в той же области видимости, что и лексическая переменная, то она может вернуть значение лексической переменной и разрешить косвенный доступ к переменной из-за пределов ее области действия.

Для лексических переменных не существует такой вещи, как «полная спецификация пути».Это для переменных пакета.Если бы переменная была объявлена ​​с «нашим» вместо «моего», вы могли бы это сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top