Subscribed unsubscribe Subscribe Subscribe

Sub::Inspector というモジュールを書いた

perl

https://metacpan.org/module/Sub::Inspector

coderefから以下の情報を簡単に取り出すモジュールです。

  • アトリビュート
  • プロトタイプ
  • 元のメソッドが定義されているファイル
  • 元のメソッドが定義されている行番号
  • 名前

いずれも標準モジュールの B.pm を使えば出来ることですが、いちいち使い方を調べるのもしょうもないのでモジュール化するに至りました。

インターフェイスは以下のとおりです(PODそのまま)。

use Sub::Inspector;
 
 
# get file, line, name (oo interface)
 
use File::Spec;
my $code = File::Spec->can('canonpath');
my $inspector = Sub::Inspector->new($code);
 
print $inspector->file; #=> '/Users/Cside/perl5/ ... /File/Spec/Unix.pm'
print $inspector->line; #=> 71
print $inspector->name; #=> 'canonpath'
 
# class method interface
 
print Sub::Inspector->file($code); #=> '/Users/Cside/perl5/ ... /File/Spec/Unix.pm'
print Sub::Inspector->line($code); #=> 71
print Sub::Inspector->name($code); #=> 'canonpath'
 
 
# get prototype
 
use Try::Tiny qw(try);
 
print Sub::Inspector->proto(\&try); #=> '&;@'
 
 
# get attributes
 
use AnyEvent::Handle;
my $code2 = AnyEvent::Handle->can('rbuf');
 
print Sub::Inspector->attrs($code2); #=> ('lvalue')