B::Xref - 为 Perl 程序生成交叉引用报告
perl -MO=Xref[,OPTIONS] foo.pl
B::Xref 模块用于生成 Perl 程序中所有变量、子程序和格式定义和使用的交叉引用列表。它作为 Perl 编译器的后端实现。
生成的报告采用以下格式
File filename1
Subroutine subname1
Package package1
object1 line numbers
object2 line numbers
...
Package package2
...
每个 文件 部分报告单个文件。每个 子程序 部分报告单个子程序,除了特殊情况 "(definitions)" 和 "(main)"。它们分别报告初始符号表遍历找到的子程序定义和程序或模块中所有子程序之外的主体部分。
然后,报告按每个变量、子例程或格式的包进行分组,特殊情况“(词法变量)”表示词法变量。每个对象名称(隐式地由其包含的包限定)在可能的情况下在其开头包含其类型字符。词法变量更容易跟踪,甚至在可能的情况下还包括解引用信息。
行号
是一个逗号分隔的列表,其中包含该对象以某种方式使用的位置的行号(其中一些前面有代码字母)。简单的用法前面没有代码字母。引入(例如,词法变量首次使用my
定义的位置)用字母“i”表示。子例程和方法调用用字符“&”表示。子例程定义用“s”表示,格式定义用“f”表示。
例如,以下是 Perl 附带的pod2man程序的报告的一部分
Subroutine clear_noremap
Package (lexical)
$ready_to_print i1069, 1079
Package main
$& 1086
$. 1086
$0 1086
$1 1087
$2 1085, 1085
$3 1085, 1085
$ARGV 1086
%HTML_Escapes 1085, 1085
这显示了在子例程clear_noremap
中使用的变量。变量$ready_to_print
是一个 my()(词法)变量,在第 1069 行introduced(首次使用 my() 声明),并在第 1079 行使用。主包中的变量$&
在第 1086 行使用,等等。
行号前面可能有一个字母
交叉引用器最有用的选项是将报告保存到单独的文件中。例如,要将myperlprogram上的报告保存到文件report中
$ perl -MO=Xref,-oreport myperlprogram
选项词用逗号(而不是空格)分隔,并遵循编译器后端选项的常用约定。
-oFILENAME
将输出定向到FILENAME
,而不是标准输出。
-r
原始输出。不是生成人类可读的报告,而是为每个变量/子例程/格式的定义/使用输出一行机器可读的格式。
-d
不要输出“(定义)”部分。
-D[tO]
(内部) 调试选项,可能只有在包含 -r
时才有用。t
选项在跟踪时打印堆栈顶部的对象。O
选项在程序执行顺序中打印每个正在处理的操作符。
非词法变量很难在程序中跟踪。有时无法确定非词法变量使用的类型。非词法非标量的引入似乎没有被正确报告。
Malcolm Beattie,[email protected]。