[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