[Moscow.pm] __PACKAGE__ namespace
Ксения Боброва
bobrovaksenia на gmail.com
Пт Окт 31 13:57:34 PDT 2014
Можно еще eval использовать:
eval("push \@{${class}::STORAGE}, \$key");
eval("\@data = \@{${class}::STORAGE}");
1 ноября 2014 г., 0:43 пользователь Андрей Фёдоров <secrethost на gmail.com>
написал:
> @class::STORAGE - обращение к переменной @STORAGE в модуле 'class'
>
> Чтобы обратиться к переменной в нужном классе, можно заменить на
> no strict 'refs';
> push @{"${class}::STORAGE"}, $key;
>
> 2014-10-31 23:09 GMT+03:00 Artur Kh <khrt на ya.ru>:
>
>> Привет,
>>
>> возникла необходимость хранить данные в переменной внутри модуля довольно
>> необычным способом. Примерно так, как это делается в DBIx::Class когда
>> описывается модель.
>>
>> Вот пример:
>>
>> use strict;
>> use warnings;
>>
>> use feature 'say';
>>
>> package BasePackage;
>>
>> my @STORAGE = ('key9');
>>
>> sub add {
>> my ($class, $key) = @_;
>> say "add $class <- $key";
>> push @class::STORAGE, $key;
>> }
>>
>> sub list {
>> my $class = shift;
>> my @data = @class::STORAGE;
>> print "$class: ";
>> local $, = ',';
>> say @data;
>> }
>>
>> package FirstPackage;
>>
>> our @ISA = ('BasePackage');
>>
>> __PACKAGE__->add('key0');
>> __PACKAGE__->add('key1');
>>
>> package SecondPackage;
>>
>> our @ISA = ('BasePackage');
>>
>> __PACKAGE__->add('key2');
>> __PACKAGE__->add('key3');
>>
>> package main;
>>
>> FirstPackage->list;
>> SecondPackage->list;
>>
>> 1;
>>
>> И вот вывод:
>>
>> $ perl package.pl
>> add FirstPackage <- key0
>> add FirstPackage <- key1
>> add SecondPackage <- key2
>> add SecondPackage <- key3
>> FirstPackage: key0,key1,key2,key3
>> SecondPackage: key0,key1,key2,key3
>>
>> Как видно набор значений выводится идентичный для обоих модулей, хотя
>> задумывалось иначе.
>>
>> Вот это я ожидал увидеть:
>>
>> FirstPackage: key0,key1
>> SecondPackage: key2,key3
>>
>> Как мне получить на выходе ожидаемый вывод?
>>
>> --
>> ak
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>>
>>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
--
Ksenia Bobrova
Senior Perl Developer
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20141101/606e4360/attachment-0001.html>
Подробная информация о списке рассылки Moscow-pm