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 行中使用,依此類推。
行號前面可能會加上一個字母
交叉參照器最實用的選項是將報告儲存到一個獨立的檔案中。例如,要將 myperlprogram 上的報告儲存到檔案 report 中
$ perl -MO=Xref,-oreport myperlprogram
選項字詞以逗號分隔(而非空白),並遵循編譯器後端選項的慣例。
-oFILENAME
將輸出導向到 FILENAME
,而非標準輸出。
-r
原始輸出。輸出每一個變數/子常式/格式的定義/使用,以機器可讀的形式顯示一行,而非產生人類可讀的報告。
-d
不要輸出「(定義)」區段。
-D[tO]
(內部)偵錯選項,如果包含 -r
,可能會很有用。t
選項會列印堆疊頂端的物件,因為它正在被追蹤。O
選項會在程式執行順序中列印每個運算子,因為它正在被處理。
非詞彙變數很難透過程式追蹤。有時無法判斷非詞彙變數使用的類型。非詞彙非純量的引入似乎沒有正確報告。
Malcolm Beattie,mbeattie@sable.ox.ac.uk。