你怎么可以从一个REPL或调试器内检索方法的POD?

我希望能够利用内幕REPL或debuger时,看到一个方法/函数的文档。

有没有让你看到一个函数的文档使用REPL或debuger时,任何模块?

显然,如果该模块存在,会问你有你的POD和代码可解析结构,以提取文档。 那是因为我已经全部我的代码记录,我可以适应需要的一切都不是问题。 目前,我有我的所有与一个前面POD方法=head2 method_name和典型线名称,用法,比如ARGS,退货,产生的异常等

典型的例子是,当你在debuger(或REPL),你想使用的功能,你不记得参数的顺序或者它们的类型,或返回元素的类型或你想要使用的提示。

我想有这样的事情get_pod($ moudle_bar,$ method_foo),甚至更好,能够把get_pod基本模块中,并不能说$bar->get_pod('foo') 我知道,这是不平凡的,有很多的角落案件。 这是我问的方法-POD提取器模块的原因。

我想说明的REPL或debuger里面的输出,因此任何指针在浏览器的HTML锚荚不方便我。

这可能是因为有一些更简单,我模糊处理。

我的第一个蛮力和昂贵的方法:

> $self = new MyModule > m $self # to see the available methods for double check the spelling > # method wanted '_connect_db' > $cmd = 'perldoc -t ' . ref($self) > x qx{$cmd}=~/(_connect_db.*?)\n\n/msg

0'_connect_db标题:_connect_db用法:功能:创建一个数据库连接如并返回处理程序示例:$胸径= $自我 - > _ connect_db($用户,$通行证,$ DB_NAME)#主机FPrefect默认返回:[0] DBI $胸径对象参数数量:[0] $用户,[1] $传球,[2] $ DB_NAME,[3] $主机,[4] $ db_brand#的MySQL,SQLite的[5] $模式=(RO,RW)#现在不用了。 在未来它会将此方法用于读取用户和密码“

显然,这工作,因为我知道,我没有任何空行。我的方法描述吊舱所以我用.*?)\n\n在正则表达式捕捉方法POD的其余部分。

难道有人对这项工作有什么好的建议或意见?

更新:

史努比建议,我已经采取了看波德::覆盖源代码,我发现,波德::报道::提取(POD的覆盖范围::里面的文件包),有方法command ,它可以查找吊舱项目或头部元素并提取它们。 我会看看如何检索这些项目。

# package Pod::Coverage::Extractor #extract subnames from a pod stream sub command { my $self = shift; my ( $command, $text, $line_num ) = @_; if ( $command eq 'item' || $command =~ /^head(?:2|3|4)/ ) { # take a closer look my @pods = ( $text =~ /\s*([^\s\|,\/]+)/g ); $self->{recent} = []; foreach my $pod (@pods) { print "Considering: '$pod'\n" if debug; # it's dressed up like a method cal $pod =~ /-E<\s*gt\s*>(.*)/ and $pod = $1; $pod =~ /->(.*)/ and $pod = $1; # it's used as a (bare) fully qualified name $pod =~ /\w+(?:::\w+)*::(\w+)/ and $pod = $1; # it's wrapped in a pod style B<> $pod =~ s/[AZ]<//g; $pod =~ s/>//g; # has arguments, or a semicolon $pod =~ /(\w+)\s*[;\(]/ and $pod = $1; print "Adding: '$pod'\n" if debug; push @{ $self->{ $self->{nonwhitespace} ? "recent" : "identifiers" } }, $pod; } }

更新2

从那里取信息的另一个地方是PDOC。 这个脚本用于浏览的API生成HTML,我用它在ENSEMBL和的Bi​​oPerl。 我相信我会学到一些东西读的源代码。

--------------解决方案-------------

我还可以发现,不正是要你想要的任何单一CPAN模块。

我不知道你是否能以某种方式结合波德::覆盖率波德::选择。

波德::覆盖率可以让你得到如下的符号:

snoopy@deb6:~$ perl -de0
DB<1> use Pod::Coverage
DB<2> our $pc = Pod::Coverage->new(package => 'Mouse');
DB<3> $pc->coverage;
DB<4> use Data::Dumper
DB<5> p Dumper $pc->{symbols}
$VAR1 = {
'around' => 1,
'init_meta' => 0,
'super' => 0,
'has' => 1,
'after' => 1,
'augment' => 0,
'inner' => 0,
'override' => 0,
'with' => 0,
'extends' => 1,
'before' => 1
};

也许波德::选择(或类似),然后可以用来提取相关章节?

编辑或者子/修改波德::覆盖率与印章收集正文。

PDL的交互式shell(perldl)可以让您阅读PDL的与文档???命令,或者类似的东西可以REPL来完成。

分类:perl的 时间:2015-03-14 人气:2
本文关键词: perl的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.313 (s). 10 q(s)