Спасибо, так и есть, я потом сам увидел свою ошибку. Сделал именно так, как предложено здесь.
-- ak From: Андрей Фёдоров <[email protected]> Reply: Moscow.pm group <[email protected]>> Date: 31 October 2014 at 22:44:38 To: Moscow.pm group <[email protected]>> Subject: Re: [Moscow.pm] __PACKAGE__ namespace @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
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
