Метаданные Puppy считываются из файла конфигурации с помощью (General :: Config) и создают этот хэш хэшей
$puppy_hashes = {
puppy_blue => { name => 'charlie', age => 4 },
puppy_red => { name => 'sam', age => 9 },
puppy_yellow => { name => 'jerry', age => 2 },
puppy_green => { name => 'phil', age => 5 },
}
пакет MotherDogRobot потребляет хэш щенков для рождения массива объектов щенков (смеется)
package MotherDogRobot;
use Moose;
use Puppy;
use Data::Dumper;
#moose includes warn and strict
sub init_puppy{
my($self,%options) = @_;
my $puppy = Puppy->new( %options );
return ($puppy);
}
sub birth_puppies{
my($self,$puppy_hashes) = @_;
my @keys = keys %{$puppy_hashes};
my @puppies = map { $self->init_puppy( $puppy_hashes->{$_} ) } @keys;
return(@puppies);
}
sub show_me_new_puppies{
my($self,$puppy_hashes) @_;
print Dumper($self->birth_puppies($puppy_hashes));
}
Ошибка нечетного числа аргументов
передача% параметров в Puppy-> new (% options)
щенкам от рождения не повезло - значит я не могу поставить лазеры на их головы = /
UPDATE
Я думаю, что проблема в том, что я передаю Hash Ref в init_puppy () вместо массива или хеша, поэтому, когда я пытаюсь передать опции% новому конструктору, он не получает правильное значение (key => ) пара - отсюда и нечетное количество аргументов ошибки.
Но с этой точки зрения я слишком долго смотрю на этот код, и я не могу понять, как правильно разыменовать его.
Кстати, это мой официальный 22-й день использования Perl!