最近の記事
- 4/22 - 思い出の紙時計
- 3/29 - さくらインターネットの VPS リニューアル
- 3/19 - SSHD への攻撃を分析してみた
- 3/9 - キーボードの過酷さ
- 3/8 - .NET のパフォーマンスについて
- 3/7 - phpMyAdmin への攻撃
- 3/1 - ミイラ取りがミイラになりかけた
- 2/22 - URL を知らなければ安全だと?
- 2/16 - 決意
- 1/30 - ルーターの UPnP 対応状況
Entering Passive Mode
さて、今日で完成としよう。
必要な機能は、引数無しで指定した場合、
自動的にシンボルテーブルのメソッドを調べることだ。
ただ、モジュールが use された直後ではまずい。
use は、暗黙的に BEGIN ブロックで実行されるため、
定義されているメソッドが読み込まれる前に実行される。
そのため import 内で対象のシンボルテーブルを検索しても、
シンボルテーブルにはまだメソッドが定義されていない。
対策として、import ではパッケージ名だけ記憶しておき、
シンボルテーブルの検索は後で行えばよい。
では、シンボルテーブルからコードを検索してみよう。
例えば、Carp のシンボルテーブルを調べてみる。
use Carp;
まずはシンボルテーブルを取得する。
my $package = 'Carp';
no strict 'refs';
my $symbol_table = \%{"${package}::"};
use strict 'refs';