gonzui - perl 用 langscan モジュールの改造

gonzui 付属の Perl 用 langscan モジュールの挙動がいろいろ気になったので、改造して使っている。改造点は以下。

  • PPI::Symbol 関連。
    • sigil (先頭記号)を取り除いたものを ident と見なすようにした。*1
    • sigil が '&' の場合、funcall と見なすようにした。
    • '::' が含まれる場合、前半を classref と見なすようにした。
  • PPI::Word 関連。
    • 前後が {} の場合、たぶんハッシュの添字なので word と見なす。*2
    • 直後に '=>' がある場合、ハッシュのキーなので word と見なす。
    • 直後に '->' がある場合、classref と見なす。
    • 上記以外で、予約語でも無いものは、たぶん関数呼び出しなので funcall と見なす。

改造用パッチ: gonzui_perl_tokenizer.20051016.diff
基本的には funcall 関連の改造が目的。
改造した副作用として、PPI::Tokenizer の代わりに PPI::Lexer を使うようにしたので、ソースの読み込み速度がオリジナル版より遅くなっている。
gonzui は、公式サイト(http://gonzui.sourceforge.net/)には「ソースコード検索エンジン」なんて書いてあるけど、ソースを読むためのツールとしてとても便利だ。gonzui のウェブインタフェースで特定のファイルをブラウズして、気になった関数名をクリックするとその関数を定義しているファイルが見付かったり、逆にその関数を呼び出しているファイルを見付けたりするのに超便利。

*1:Perl5 の場合、@array を $array[0] と参照するので、sigil まで変数名に含まれるのは変。Perl6 なら正しいけど。

*2:正確ではない。例: sub func1 { func2 }