內容

名稱

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)」。這些分別報告最初符號表巡覽找到的子常式定義,以及所有子常式外部的程式或模組主體。

報告會依每個變數、子常式或格式的 套件 分組,特殊情況「(lexicals)」表示詞彙變數。每個 物件 名稱(隱含地由其包含的 套件 限定)在開頭包含其類型字元(如果可能)。詞彙變數較容易追蹤,甚至包含解除參考資訊(如果可能)。

行號 是逗號分隔的清單,列出物件在其中以某種方式使用的行號(有些會加上程式碼字母)。簡單使用不會加上程式碼字母。引言(例如詞彙變數第一次使用 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 行中引入(首次透過 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,mbeattie@sable.ox.ac.uk。