<div dir="ltr"><div><div><div><div><div><div>Если я правильно понимаю, import в такой ситуации вызовется после has, а не до, поэтому default в приведённом примере продолбается. <br><br></div>Я бы делал тогда уж <br><br>use Moose;<br>our %defaults; <br></div><div>sub import { shift; %defaults = @_ if @_ };<br></div>has foo => is => "rw", default => sub { $defaults{foo} };<br></div><br></div>(Тут, понятное дело, 100500 проверок опущены, это псевдокод по сути, но он рабочий). Или как альтернатива - сделать <br><br></div><div>sub BUILD {<br></div><div>    my $self = shift;<br></div><div>    foreach (keys %defaults) {<br></div><div>         $self->{$_} ||= $defaults{$_};<br></div><div>    };<br></div><div>};<br><br></div><div>Выглядит пострашнее, но работать вроде быстрее должно (хотя кто его знает, муз - надо бенчмарк делать). <br></div><div><br></div>Но здесь возникает новая засада - а если модуль поюзан из разных мест, и там разные defaults?<br><br></div><div>Т.е. <br><br>package Foo; <br></div><div>use MyDefaults foo => exp(1); # e<br>.......<br></div><div>package Bar;<br></div><div>use MyDefaults foo => 4*atan2(1,1); #pi<br>......<br></div><div>package Baz;<br></div><div>use Foo;<br></div><div>use Bar;<br></div><div><br><div><div><div><div><div>И вот если вызовы Foo и Bar переставить, то результаты выполнения программы вызовут много слов на е... и пи... у того, кто это сделает.<br><br></div><div>Так что я бы, наверное, ещё бы ругался на второй вызов import с непустыми параметрами. <br></div><div><br></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-12-28 15:05 GMT+02:00 Dmitry L. <span dir="ltr"><<a href="mailto:dim0xff@gmail.com" target="_blank">dim0xff@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Привет!<br>
<br>
Задача - передавать в Moose объект значения атрибутов по-умолчанию<br>
через аргументы import:<br>
<br>
use MyModule default_var1 => 123;<br>
<br>
<br>
Подскажите, на сколько верно такое решение<br>
<a href="https://gist.github.com/dim0xff/b40880664e62a71442b7" rel="noreferrer" target="_blank">https://gist.github.com/dim0xff/b40880664e62a71442b7</a> ?<br>
<br>
Спасибо!<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
//wbr, Dmitry L.<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" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</font></span></blockquote></div><br></div>