ファイルが既にロードされている場合use/require
、例外をスローできるようにフックする方法はありますか? 私の今後の予定nextgen::blacklist
では、特定のモジュールが使用されている場合、私は死にたいと思っています。で述べたように、私は object-hook メソッドを使用していますperldoc -f require
: 3 つのようなフックobject、subref を持つ配列、およびsubrefがあります。この投稿の例は object-hook です。sub-ref フックの私の試みは にあり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