Вопрос, на который я ссылался выше , подробно описывает различные опции при инкапсуляции вызова метода в коде ref.В вашем случае я бы написал пакет main
следующим образом:
my $storage = Storage->new;
my $parser = Parser->new;
$parser->generic_batch_store(sub {$storage->batch_store(@_)});
$parser->parse;
$storage
изменен на лексический, чтобы ссылка на код sub {$storage->batch_store(@_)}
могла закрываться поверх него.(@_)
, добавленное в конец, позволяет передавать аргументы методу.
Я не эксперт Moose, но я считаю, что вам нужно будет вызвать код с дополнительной стрелкой разыменования:
$self->generic_batch_store->(\@buf);
, что просто означает:
($self->generic_batch_store())->(\@buf);