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 };
这里有没有人可以解释这个?
更新
这似乎是由这个块引起的:
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 };
}
}
但为什么呢?有什么区别??
答案 0 :(得分:2)
如果您确实已经阅读了上述代码段的注释,那么您已经知道了问题的答案:
# "Anonymize" all our subroutines into unnamed closures; so we can safely
# refresh this very package.
Jesse正在做一些沉重的巫术,以使模块能够重新加载自己(在重新加载之前取消它自己的公共接口)。