当我们开始使用他人的 Perl 程序或包时,我们希望看到 Perl 子程序的源代码。
以下是 Steve’s Practice 寻找Package 和Subroutine 根源的做法。内容来自网络并在本地环境运行通过。

Find Package
将下面的代码保存到文件fine_pm, 并更改为可执行文件。
然后使用命令 find_pm <module name>
来寻找module.
#!/usr/bin/env perl
use strict;
use warnings;
my $sub_path = shift @ARGV;
if (not defined $sub_path)
{
print "\nERROR: No arguments supplied.\n\n";
print "Syntax: find_pm [Perl Module]\n\n";
exit 1;
}
my $sub_path_orig = $sub_path;
$sub_path =~ s/::/\//g;
foreach my $lib_path (@INC)
{
my $full_path = "$lib_path/$sub_path";
if ($full_path !~ /\.pm$/)
{
$full_path .= ".pm";
}
# print "DEBUG: $full_path\n";
if (-e $full_path)
{
print "$full_path\n";
exit 0;
}
}
print "$sub_path_orig: module not found\n";
Find Subroutine
下面这个代码来帮助找到 subroutine,代码会打印出定义这个subroutine 的源文件以及行号。
use mypl ;
sub find_sub (\&) {
my $code = shift;
require B;
my $obj = B::svref_2object($code); # create a B::CV object from $code
print "$code:\n";
print " $$_[0]: $$_[1]\n" for
[file => $obj->FILE],
[line => $obj->GV->LINE],
[name => $obj->GV->NAME],
[package => $obj->STASH->NAME];
}
find_sub &::mypl::dev_test ;
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...