tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】Class::Inspectorで任意のperlモジュールのサブルーチン(メソッドor関数)一覧を表示するワンライナーメモ

はじめに

perlモジュールのサブルーチン一覧を表示したいときってありますよね。
ドキュメントに説明書きたいときか。class図的なヤツのmethodに書きたいとか。
短いヤツならコピペしてもいいですけど長いソースとかスクロールしてコピペしてとかやってもだるい!

なのでこちらのエントリーをもとにサブルーチン一覧を表示するワンライナーメモ

後でみるカンペ用に結果先出し

Hogeというモジュールのサブルーチン一覧を見たい時の例

# perl -MClass::Inspector -MData::Dumper -I'/home/hoge/perl/pm' -MHoge -e 'print Dumper (Class::Inspector->functions("Hoge"))'
$VAR1 = [
          '_private_func',
          'func1',
          'func2',
          'func3'
        ];

あじぇんだ

  1. Class::Inspectorについて
  2. Class::Inspectorでサブルーチン一覧表示ワンライナー

1. Class::Inspectorについて

ほぼ参考サイトのまんまですが、下記のようなことができるみたいです

  • パッケージがインストール済みかどうかをチェック
  • パッケージ名から Package/Name.pm などへのファイル名に変換
  • ある名前のサブルーチンが、そのパッケージで宣言されているかどうか
  • そのパッケージで宣言されているすべてのサブルーチン名のリストを返却
    などなど
参考

2. Class::Inspectorでサブルーチン一覧表示ワンライナー

はじめに下記のようなモジュールがある想定で話します。

  • 構成
# pwd
/home/hoge/perl/pm

# ls -l
-rw-rw-r-- 1 hoge hoge  53  1月 27 14:06 2015 Foo.pm
-rw-rw-r-- 1 hoge hoge 110  1月 27 14:05 2015 Hoge.pm
package Hoge;
use parent qw(Foo);
sub func1 () {}
sub func2 () {}
sub func3 () {}
sub _private_func () {}
1;
package Foo;
sub foo () {}
sub _private_foo () {}
1;
サブルーチンの一覧を表示する(そのクラスに実装されているもののみ)
# perl -MClass::Inspector -MData::Dumper -I'/home/hoge/perl/pm' -MHoge -e 'print Dumper (Class::Inspector->functions("Hoge"))'
$VAR1 = [
          '_private_func',
          'func1',
          'func2',
          'func3'
        ];
サブルーチンの一覧を表示する(親も含む)
# perl -MClass::Inspector -MData::Dumper -I'/home/hoge/perl/pm' -MHoge -e 'print Dumper (Class::Inspector->methods("Hoge"))'
$VAR1 = [
          '_private_foo',
          '_private_func',
          'foo',
          'func1',
          'func2',
          'func3'
        ];
サブルーチンの一覧を表示する(親も含む、publicのみ)

_(アンダースコア)のあるものはprivateメソッドとみなし、それ以外をpublicと見なすみたいです。
第2引数に'public''private'を指定するとどちらかのメソッドのみ表示します。

# perl -MClass::Inspector -MData::Dumper -I'/home/hoge/perl/pm' -MHoge -e 'print Dumper (Class::Inspector->methods("Hoge", "public"))'
$VAR1 = [
          'foo',
          'func1',
          'func2',
          'func3'
        ];

おわり

自分用メモでしたが、ちょこちょこ使えるときはあるかなーと!