LINUX.ORG.RU

[Perl] Метапрограмирование и ссылки на функции

 


0

0

Есть мейн часть (программа-демон):

sub somefunction(\%); # обратите внимание на данное описание

my $coderef = \&somefunction;
eval "use MyModule"; # проверяем $@

eval {
  MyModule::setupme($coderef);
};
# проверяем $@

Файл MyModule.pm:

package MyModule;

our $coderef;
sub setupme(\&) {
  $coderef = shift;
  
  return 1;
}

# эта функция вызывается самостоятельно в процессе работы, уже после setupme()

sub runMainFunction() {
  my $data = { some => "thing" };
  $coderef->(% {$data}); # см. ниже
}

Фишка в том, что вызов $coderef->(% {$data}) обрабатывается как будто в мейне у нас описана функция как sub somefunction(%), а не так как я задал, т.е как ссылка !

Это баг или фича?

P.S. linux x86_64, perl 5.14.2

Прототипы не учитываются при косвенном вызове через ссылку. Они только для compile-time. А компилятор вывести адрес функции по ссылке понятно не может.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.