このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
C# や Java には、リフレクションと呼ばれる機能がある。
プログラムからクラスのメンバの情報を得ることができ、
文字列で名前を指定してメソッドを呼ぶなどの能力をもつ。
Perl にも制限つきだが、同じような機能がある。
Perl のクラスはパッケージとして定義されるが、
パッケージにはシンボルテーブルと呼ばれる情報がある。
シンボルテーブルには、パッケージ内のサブルーチンや、
our で定義したパッケージ変数などが記録されている。
Perl シンボルテーブルは、実はただの連想配列である。
シンボルテーブルは、通常の変数と違い、
パッケージ名にコロンを 2 つつけた特別な名前を持つ。
Employee パッケージのシンボルテーブルは、
以下の構文でアクセスできる。
%Employee::
では、簡単なテストをしてみよう。
以前作った Employee クラスのシンボルをダンプしてみる。
データの出力には、Data::Dumper クラスを使う。
このクラスは、渡した変数の内容をテキストに変換する。
感覚的には toString のようなものだが、
出力されたテキストは Perl のコードになっている。
シンボルテーブルもただの変数なので、渡すことができる。
use Employee;
use Data::Dumper;
print Dumper(\%Employee::);
実行してみよう。
$VAR1 = {
'Reflector::' => *{'Employee::Reflector::'},
'name' => *Employee::name,
'set_salary' => *Employee::set_salary,
'import' => *Employee::import,
'salary' => *Employee::salary,
'Version' => *Employee::Version,
'get_salary' => *Employee::get_salary,
'BEGIN' => *Employee::BEGIN,
'weight' => *Employee::weight,
'new' => *Employee::new,
'gender' => *Employee::gender
};
どうだろう。見慣れたメソッドがキーに並んでいる。