如果文件已经加载,是否有任何方法可以连接到文件中,use/require
以便我可以抛出异常?在我即将到来nextgen::blacklist
的 中,如果使用某些模块,我会尝试死亡。我正在使用中提到的对象挂钩方法perldoc -f require
:有三类挂钩object,带有 subref 的数组和subref。这篇文章中的例子是 object-hook,你可以在nextgen::blacklist
.
我想要的语法是这样的:
perl -Mnextgen -E"use NEXT"
package Foo;
use nextgen;
use NEXT;
理想情况下,它应该抛出这样的消息:
nextgen::blacklist violation with import attempt for: [ NEXT (NEXT.pm) ] try 'use mro' instead.
我已经尝试了很多不同的方法。
package Class;
use Data::Dumper;
use strict;
use warnings;
sub install {
unshift @main::INC, bless {}, __PACKAGE__
unless ref $main::INC[0] eq __PACKAGE__
;
}
sub reset_cache { undef %main::INC }
sub Class::INC {
my ( $self, $pmfile ) = @_;
warn Dumper [\%main::INC, $pmfile];
#undef %INC;
}
package main;
BEGIN { Class->install; undef %main::INC }
use strict;
use strict;
use strict;
use strict;
use warnings;
use strict;
use warnings;
似乎%INC
只在这些钩子之后设置。我对任何可以让我抛出异常的东西都感兴趣。如果尝试加载/重新加载一个模块,尽管它的状态是其他不使用我的编译指示的模块的依赖项,我想死。
package Foo;
use NEXT;
package main;
use Foo; (which uses Next.pm);
use NEXT.pm; ## Throw exception