Как может я получать рабочие Данные:: Псевдоним в Perl 5.12?

Мне нравится Data::Alias. Это, кажется, повреждается в 5,12. Это может быть зафиксировано? Это будет скоро зафиксировано? Есть ли какая-либо хорошая альтернатива?

5
задан Borodin 18 July 2015 в 23:30
поделиться

2 ответа

Любая версия Data :: Alias ​​, созданная до версии 1.08 (выпущена 22 октября 2010 г. BST) не будет работать с Perl 5.12, поскольку Data :: Alias ​​ до 1.08 не работает в Perl 5.12. Обновите до последней версии (1.08 или новее), и она должна работать!

В качестве интересного примечания, похоже, что возможность создавать псевдонимы может появиться в Perl как языковая функция в будущем, поскольку очистка : = больше не означает пустой список атрибутов . С нетерпением жду этого! :)

11
ответ дан 18 December 2019 в 10:42
поделиться

Модуль не обновлялся с 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 
     
5
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: