Это длинное название, но, боюсь, я не могу вынести ни единого слова, не потеряв истинного значения вопроса. Сначала я кратко опишу, чего я пытаюсь достичь, а затем расскажу, почему я хочу, чтобы это было сделано именно так. Пропустите бессвязную, если вы намерены прямо ответить на вопрос о названии вопроса: -)
Краткое описание
Предполагая существование встроенной lexicalize
, которая делает именно то, что я хочу, вот так:
package Whatever;
{
lexicalize $Other::Package::var;
local $var = 42;
Other::Package->do_stuff; # depends on that variable internally
}
Whys и whynots
Для некоторого контекста я тестирую whitebox стороннего модуля.
Мне нужна переменная localized , потому что я хочу, чтобы она изменялась только в течение ограниченного времени, прежде чем тесты перейдут к чему-то другому. local
- лучший способ, который я нашел, чтобы сделать это, не завися от знания выбора модулем начального значения.
Я хочу лексическое связывание по двум основным причинам:
- Я не хочу загрязнять пространство имен верхнего уровня тестового файла.
- Я хочу что-то короче, чем полное имя. Для краткости его нет в примере кода, но я использую идентификатор намного больше, чем показано, с вычислениями и обновлениями относительно его предыдущего значения.
Я не смог прилично использовать our
, потому что он не будет захватывать переменную из другого пакета: «Имя переменной не разрешено для переменной $ Other :: Package :: var в« our »». Обман для временного ввода Other :: Область действия пакета не обрезает его: если я использую блок ({ package Other::Package; our $var }
), то привязка не длится достаточно долго, чтобы быть полезной; и если я этого не сделаю (package Other::Package; our @var; package main
), то мне нужно знать и копировать имя предыдущего пакета, что предотвращает слишком частое перемещение этого фрагмента кода.
Выполняя домашнее задание, прежде чем задавать предыдущую форму этого вопроса, я обнаружил Lexical::Var
, который, казалось, будет точно , что мне нужно. Увы: «Не удается локализовать с помощью ссылки».
Я также старался изо всех сил на интуиции форм на основе my *var
, но продолжал сталкиваться с синтаксическими ошибками. Сегодня я узнал больше, чем хотел о том, чтобы определить объем и привязку: -)
Я не могу придумать причину, по которой то, что я хочу, не может быть возможным, но я не могу найти правильное заклинание. Я прошу о неудачном невыполненном крайнем случае?