その一部であるパッケージの例外を定義しているモジュールがあります。例外はで宣言されていException::Class::Nested
ます。
説明のために、このモジュールの名前Foo::Bar::Exception
がであり、それが定義するすべての例外がそのモジュールの第1レベルのサブクラスであるとします(たとえば、Foo::Bar::Exception:DoNotDoThat
)。私が気にするすべての例外は、このモジュールファイルで定義されています。他のモジュールが行う追加のサブクラス化には興味がありません。
私のimport
方法では、定義されているすべての例外のリストを作成したいと思います。定義と同期しなくなる可能性があり、手動で保守する必要があります。
では、のシンボルテーブルをFoo::Bar::Exception->import
反復処理しFoo::Bar::Exception
て、モジュールで宣言されているすべての例外(第1レベルのサブクラス)を見つけるにはどうすればよいでしょうか。これは、私が興味を持っているアクティブなロード済みシンボルテーブルです。ファイルシステム検索などはありません。
ありがとう!
[補遺]
私の例外サブクラス名はすべてException
またはで終わるのでError
、これは私が望むものに近づいているように見えます:
my %symtable = eval("'%' . __PACKAGE__ . '::'");
my @shortnames = grep(m!(?:Error|Exception)::$!, keys(%symtable));
@shortnames = ( map { $_ =~ s/::$//; $_; } @shortnames );
my @longnames = ( map { __PACKAGE__ . '::' . $_ } @shortnames );
括弧の一部は不要ですが、配列のコンテキストを明確にするために追加しました。