[Moscow.pm] __PACKAGE__ namespace

Artur Kh khrt на ya.ru
Пт Окт 31 23:28:24 PDT 2014


Спасибо, так и есть, я потом сам увидел свою ошибку. Сделал именно так, как предложено здесь.

-- 
ak

From: Андрей Фёдоров <secrethost at gmail.com>
Reply: Moscow.pm group <moscow-pm at pm.org>>
Date: 31 October 2014 at 22:44:38
To: Moscow.pm group <moscow-pm at pm.org>>
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 <khrt at 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 at pm.org | http://moscow.pm.org


--  
Moscow.pm mailing list
moscow-pm at pm.org | http://moscow.pm.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20141101/9b2af548/attachment.html>


Подробная информация о списке рассылки Moscow-pm