<div dir="ltr">Можно еще eval использовать:<div><div><br></div><div> eval("push \@{${class}::STORAGE}, \$key");</div><div><br></div><div> eval("\@data = \@{${class}::STORAGE}");</div><div><br></div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">1 ноября 2014 г., 0:43 пользователь Андрей Фёдоров <span dir="ltr"><<a href="mailto:secrethost@gmail.com" target="_blank">secrethost@gmail.com</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span style="color:rgb(0,0,0);font-family:Helvetica,Arial;font-size:13px">@class::STORAGE - обращение к переменной @STORAGE в модуле 'class'</span><br><div><span style="color:rgb(0,0,0);font-family:Helvetica,Arial;font-size:13px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Helvetica,Arial;font-size:13px">Чтобы обратиться к переменной в нужном классе, можно заменить на</span></div><div><div><font color="#000000" face="Helvetica, Arial">no strict 'refs';</font></div><div><font color="#000000" face="Helvetica, Arial">push @{"${class}::STORAGE"}, $key;</font></div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">2014-10-31 23:09 GMT+03:00 Artur Kh <span dir="ltr"><<a href="mailto:khrt@ya.ru" target="_blank">khrt@ya.ru</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div style="word-wrap:break-word"><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Привет,</div><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">возникла необходимость хранить данные в переменной внутри модуля довольно необычным способом. Примерно так, как это делается в DBIx::Class когда описывается модель.</div><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto">Вот пример:</div><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div><div style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><div style="margin:0px"><div style="margin:0px"><div style="margin:0px">use strict;</div><div style="margin:0px">use warnings;</div><div style="margin:0px"><br></div><div style="margin:0px">use feature 'say';</div><div style="margin:0px"><br></div><div style="margin:0px">package BasePackage;</div><div style="margin:0px"><br></div><div style="margin:0px">my @STORAGE = ('key9');</div><div style="margin:0px"><br></div><div style="margin:0px">sub add {</div><div style="margin:0px">    my ($class, $key) = @_;</div><div style="margin:0px">    say "add $class <- $key";</div><div style="margin:0px">    push @class::STORAGE, $key;</div><div style="margin:0px">}</div><div style="margin:0px"><br></div><div style="margin:0px">sub list {</div><div style="margin:0px">    my $class = shift;</div><div style="margin:0px">    my @data = @class::STORAGE;</div><div style="margin:0px">    print "$class: ";</div><div style="margin:0px">    local $, = ',';</div><div style="margin:0px">    say @data;</div><div style="margin:0px">}</div><div style="margin:0px"><br></div><div style="margin:0px">package FirstPackage;</div><div style="margin:0px"><br></div><div style="margin:0px">our @ISA = ('BasePackage');</div><div style="margin:0px"><br></div><div style="margin:0px">__PACKAGE__->add('key0');</div><div style="margin:0px">__PACKAGE__->add('key1');</div><div style="margin:0px"><br></div><div style="margin:0px">package SecondPackage;</div><div style="margin:0px"><br></div><div style="margin:0px">our @ISA = ('BasePackage');</div><div style="margin:0px"><br></div><div style="margin:0px">__PACKAGE__->add('key2');</div><div style="margin:0px">__PACKAGE__->add('key3');</div><div style="margin:0px"><br></div><div style="margin:0px">package main;</div><div style="margin:0px"><br></div><div style="margin:0px">FirstPackage->list;</div><div style="margin:0px">SecondPackage->list;</div><div style="margin:0px"><br></div><div style="margin:0px">1;</div><div style="margin:0px"><br></div></div></div></div><div>И вот вывод:</div><div><br></div><div><div>$ perl <a href="http://package.pl" target="_blank">package.pl</a></div><div>add FirstPackage <- key0</div><div>add FirstPackage <- key1</div><div>add SecondPackage <- key2</div><div>add SecondPackage <- key3</div><div>FirstPackage: key0,key1,key2,key3</div><div>SecondPackage: key0,key1,key2,key3</div></div><div><br></div><div>Как видно набор значений выводится идентичный для обоих модулей, хотя задумывалось иначе.</div><div><br></div><div>Вот это я ожидал увидеть:</div><div><br></div><div><div>FirstPackage: key0,key1</div><div>SecondPackage: key2,key3</div></div><div><br></div><div>Как мне получить на выходе ожидаемый вывод?</div><span><font color="#888888"><div><br></div><div><div style="font-family:helvetica,arial;font-size:13px">-- <br>ak</div></div></font></span></div><br></div></div><span class="HOEnZb"><font color="#888888">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></font></span></blockquote></div><br></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Ksenia Bobrova</div>Senior Perl Developer</div></div>
</div>