Мне нравится Data::Alias
. Это, кажется, повреждается в 5,12. Это может быть зафиксировано? Это будет скоро зафиксировано? Есть ли какая-либо хорошая альтернатива?
Любая версия Data :: Alias
, созданная до версии 1.08 (выпущена 22 октября 2010 г. BST) не будет работать с Perl 5.12, поскольку Data :: Alias
до 1.08 не работает в Perl 5.12. Обновите до последней версии (1.08 или новее), и она должна работать!
В качестве интересного примечания, похоже, что возможность создавать псевдонимы может появиться в Perl как языковая функция в будущем, поскольку очистка : =
больше не означает пустой список атрибутов . С нетерпением жду этого! :)
Модуль не обновлялся с 2007 года, но вы всегда можете отправить сообщение автору (Matthijs van Duin: (скрыто) или отправить отчет об ошибке, как Роберт упомянул в своем ответе.
Вот несколько альтернатив:
Что касается дополнительных модулей CPAN для псевдонимов, которые работают в 5.12 +:
И поиск «псевдонима» на CPAN вызывает несколько больше, ни один, похоже, не предлагает «делать все с псевдонимами» в этом заявлении "функция Data :: Alias. Поэтому, пока не будет исправлен Data :: Alias
, вы можете использовать один из вышеперечисленных или следующие чистые методы Perl:
Perl имеет встроенную поддержку для присвоения псевдонима любой переменной переменным, которые существуют в таблице символов. Это делается следующим образом:
my $ x = 1;
our $ y; # объявить $ y в таблице символов для текущего пакета { {1}} {
local * y = \ $ x; # сделать $ y псевдоним $ x в текущей области видимости
$ y ++;
}
print $ x; # выводит 2
Но, как всегда, помните, что на самом деле делает динамическая область / local, прежде чем ее использовать.
Лексический скаляр может использоваться как псевдоним в рамках цикла for:
my $ x = 1;
для моего $ y ($ x) {
$ y ++ ;
}
print $ x; # выводит 2
этот тип лексического псевдонима может даже быть передан из цикла в замыкании, если необходимо
Вы можете создавать псевдонимы массивов, используя магию псевдонимов Perl для списков аргументов подпрограмм:
my $ x = 1;
мой $ псевдоним = sub {\ @_} -> ($ x); # возвращаем ссылку на свой список аргументов,
# который поддерживает его псевдонимы
$$ alias [0] ++;
print $ x; # выводит 2
, но на самом деле это не дает вам больше функциональности, чем ссылки, только с другим синтаксисом.
И пример со ссылками на Perl:
my $ x = 1;
мой $ y = \ $ x; # берем ссылку на $ x
$$ y ++; # разыменование $ y
print $ x; # выводит 2