memo517 : Xref
Created Tue Dec 25 20:16:50 2012
Last Modified Tue Dec 25 20:23:04 2012
*
#1 Tue Dec 25 20:16:50 2012 / Tue Dec 25 20:23:04 2012
・PerlのXrefについて
$ perl -MO=Xref [perl code]
などとすると、当該コードの"クロスリファレンス"レポートが生成される。
これは、コード内の変数・サブルーチンがどこで定義され、どこで使われているのかを
網羅的に調べ、まとめたもの。
-rオブションを加えると、機械加工しやすい形で出力してくれる。
$ perl -MO=Xref,-r [perl code]
個人的には今のところ次の用途で使う:
(1)定義しただけで使われていないローカル変数の検出
(2)同じ名前だがシンボルが異なるローカル変数の検出
(3)同じサブルーチン内で多重定義されているローカル変数の検出
(1)に関してはかなり精度が良い。
しかし(3)についてはちょっと難アリ。
(3)で検出したいのは、例えば以下のような状況。
------------------
#親子関係にあるスコープにおいて名前がかぶっている。
my $t;
{
my $t;
}
------------------
しかし、Xrefの出力上、これは下記のような状況と区別ができない?
------------------
#親子関係に無いスコープにおいて名前がかぶっている。
{
my $t;
}
{
my $t;
}
------------------
勉強不足なのかも。
また、場合によっては致命的な弱点となるが、Xrefは静的解析を行うため、
クロージャ等の動的なコードには対応できない事に気をつける必要がある。
あと、-Wが使えるならそっちの方が簡単かも・・・
*
Link to:
*
Linked from:
memo517 : Xref
*#1 Tue Dec 25 20:16:50 2012 / Tue Dec 25 20:23:04 2012
$ perl -MO=Xref [perl code]
などとすると、当該コードの"クロスリファレンス"レポートが生成される。
これは、コード内の変数・サブルーチンがどこで定義され、どこで使われているのかを
網羅的に調べ、まとめたもの。
-rオブションを加えると、機械加工しやすい形で出力してくれる。
$ perl -MO=Xref,-r [perl code]
個人的には今のところ次の用途で使う:
(1)定義しただけで使われていないローカル変数の検出
(2)同じ名前だがシンボルが異なるローカル変数の検出
(3)同じサブルーチン内で多重定義されているローカル変数の検出
(1)に関してはかなり精度が良い。
しかし(3)についてはちょっと難アリ。
(3)で検出したいのは、例えば以下のような状況。
------------------
#親子関係にあるスコープにおいて名前がかぶっている。
my $t;
{
my $t;
}
------------------
しかし、Xrefの出力上、これは下記のような状況と区別ができない?
------------------
#親子関係に無いスコープにおいて名前がかぶっている。
{
my $t;
}
{
my $t;
}
------------------
勉強不足なのかも。
また、場合によっては致命的な弱点となるが、Xrefは静的解析を行うため、
クロージャ等の動的なコードには対応できない事に気をつける必要がある。
あと、-Wが使えるならそっちの方が簡単かも・・・
*Link to: