内容

名称

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 行使用,等等。

行号前面可能有一个字母

i

首次引入(使用 my() 声明)的词法变量。

&

子例程或方法调用。

s

子例程定义。

r

格式定义。

交叉引用器最有用的选项是将报告保存到单独的文件中。例如,要将myperlprogram上的报告保存到文件report

$ perl -MO=Xref,-oreport myperlprogram

OPTIONS

选项词用逗号(而不是空格)分隔,并遵循编译器后端选项的常用约定。

-oFILENAME

将输出定向到FILENAME,而不是标准输出。

-r

原始输出。不是生成人类可读的报告,而是为每个变量/子例程/格式的定义/使用输出一行机器可读的格式。

-d

不要输出“(定义)”部分。

-D[tO]

(内部) 调试选项,可能只有在包含 -r 时才有用。t 选项在跟踪时打印堆栈顶部的对象。O 选项在程序执行顺序中打印每个正在处理的操作符。

BUGS

非词法变量很难在程序中跟踪。有时无法确定非词法变量使用的类型。非词法非标量的引入似乎没有被正确报告。

AUTHOR

Malcolm Beattie,[email protected]