Предложу пожалуй свой вариант: https://gist.github.com/17e/07879edf40c70d66599d
anton@Currant:~$ perl /tmp/example.pl add FirstPackage <- key0 add FirstPackage <- key1 add SecondPackage <- key2 add SecondPackage <- key3 FirstPackage: key0,key1 SecondPackage: key2,key3 31 октября 2014 г., 23:57 пользователь Ксения Боброва <[email protected]> написал: > Можно еще eval использовать: > > eval("push \@{${class}::STORAGE}, \$key"); > > eval("\@data = \@{${class}::STORAGE}"); > > > > 1 ноября 2014 г., 0:43 пользователь Андрей Фёдоров <[email protected]> > написал: > >> @class::STORAGE - обращение к переменной @STORAGE в модуле 'class' >> >> Чтобы обратиться к переменной в нужном классе, можно заменить на >> no strict 'refs'; >> push @{"${class}::STORAGE"}, $key; >> >> 2014-10-31 23:09 GMT+03:00 Artur Kh <[email protected]>: >>> >>> Привет, >>> >>> возникла необходимость хранить данные в переменной внутри модуля довольно >>> необычным способом. Примерно так, как это делается в 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 >>> [email protected] | http://moscow.pm.org >>> >> >> >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org >> > > > > -- > Ksenia Bobrova > Senior Perl Developer > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
