Это похоже на проблему X / Y.Что именно ты пытаешься сделать?Если это сокращает время загрузки, тогда вам могут быть интересны такие модули, как AutoSplit / AutoLoader.
Если вы хотите создать какую-то структуру данных подпрограмм, вы должны устанавливать анонимные подпрограммы в хеш,вместо того, чтобы давать им все имена.
Учитывая ссылку на подпрограмму:
my $code = sub {...};
, вы бы назвали это следующим образом:
$self->$code(...);
Если вместо этого у вас есть имя подпрограммы,вы можете посмотреть код ссылки:
my $code = 'Package::With::The::Subroutines'->can('method_name');
и, если это удастся (отметьте это), вы можете использовать $self->$code(...)
для его вызова.
Учитывая этот код:
{
no strict "refs";
$routine->{$param}();
}
Вы бы передали $self
в процедуру с:
{
no strict "refs";
$routine->{$param}($self);
}
Или вы могли бы подойти к ней так же, как я делал выше с can
:
'package'->can($routine->{$param})->($self)
если не хочешь выключать strict 'refs'