Ну или привязываться к имени пакета, и хранить уже в хэше.
https://gist.github.com/kadavr/eebff145f89116d5db8e  Но, что то мне эта идея вообще не нравится
 
29.12.2015, 22:08, "Evgeniy Vansevich" <[email protected]>:
Если правильно понял, то можно так.
https://gist.github.com/kadavr/dba006acf5816230ddb0
 
Но в моем примере,мы привязываемся к ситуации один импорт один use. Что не верно
 
28.12.2015, 16:46, "Konstantin S. Uvarin" <[email protected]>:
Если я правильно понимаю, import в такой ситуации вызовется после has, а не до, поэтому default в приведённом примере продолбается.

Я бы делал тогда уж

use Moose;
our %defaults;
sub import { shift; %defaults = @_ if @_ };
has foo => is => "rw", default => sub { $defaults{foo} };
(Тут, понятное дело, 100500 проверок опущены, это псевдокод по сути, но он рабочий). Или как альтернатива - сделать

sub BUILD {
    my $self = shift;
    foreach (keys %defaults) {
         $self->{$_} ||= $defaults{$_};
    };
};

Выглядит пострашнее, но работать вроде быстрее должно (хотя кто его знает, муз - надо бенчмарк делать).
 
Но здесь возникает новая засада - а если модуль поюзан из разных мест, и там разные defaults?

Т.е.

package Foo;
use MyDefaults foo => exp(1); # e
.......
package Bar;
use MyDefaults foo => 4*atan2(1,1); #pi
......
package Baz;
use Foo;
use Bar;

И вот если вызовы Foo и Bar переставить, то результаты выполнения программы вызовут много слов на е... и пи... у того, кто это сделает.

Так что я бы, наверное, ещё бы ругался на второй вызов import с непустыми параметрами.
 

2015-12-28 15:05 GMT+02:00 Dmitry L. <[email protected]>:
Привет!

Задача - передавать в Moose объект значения атрибутов по-умолчанию
через аргументы import:

use MyModule default_var1 => 123;


Подскажите, на сколько верно такое решение
https://gist.github.com/dim0xff/b40880664e62a71442b7 ?

Спасибо!

--
//wbr, Dmitry L.
--
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
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить