Почему вызов Module :: Refresh-> refresh перенаправляется в Module :: Refresh :: CODE? - PullRequest
0 голосов
/ 29 июля 2011
PerlConsole::Console::interpret(/home/perlconsole-0.4/lib/PerlConsole/Console.pm:281):
281:        Module::Refresh->refresh;
  DB<5> s
Module::Refresh::CODE(0x70a340)(/home/perlconsole-0.4/depends/Module-Refresh-0.16/lib/Module/Refresh.pm:205):
205:            *$sym = sub { goto &$code };

Есть здесь кто-нибудь, кто может это объяснить?

UPDATE

Кажется, это вызвано этим блоком:

BEGIN {
    no strict 'refs';
    foreach my $sym ( sort keys %{ __PACKAGE__ . '::' } ) {
    next
        if $sym eq
        'VERSION';    # Skip the version sub, inherited from UNIVERSAL
    my $code = __PACKAGE__->can($sym) or next;
    delete ${ __PACKAGE__ . '::' }{$sym};
    *$sym = sub { goto &$code };
    }

}

Но почему? какая разница ??

1 Ответ

2 голосов
/ 29 июля 2011

Если бы вы на самом деле читали комментарий над этим фрагментом кода, вы бы уже знали ответ на свой вопрос:

# "Anonymize" all our subroutines into unnamed closures; so we can safely
# refresh this very package.

Джесси выполняет там тяжелую работу, чтобы модуль могперезагрузить себя (пока не отключил собственный публичный интерфейс перед перезагрузкой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...