perlimportsとは The Perl and Raku Conference (In the Cloud) 2021で発表されたツール https://metacpan.org/dist/App-perlimports 作者はOALDERS(Olaf Alders)さん 最近静的解析ツールにハマっているっぽい App::perlimports 今日の内容 App::perlvars コード上で未使用の変数検出ツール
EXPORTのまとめ Perlはモジュールを use する時に、モジュールにimportがあれば実行する importには関数エクスポートがしばしば定義されていて、関数をインポートすると、モ ジュール側で定義した関数を呼び出したスクリプトファイル内で定義した様に使える しばしばどこで関数を定義したかわからなくなるので、 use の際にインポートしたい関 数名だけ列挙することができる
PPIの特徴 Round Trip Safe(往復安全) PPI <-> Perlの変換を何回繰り返しても同じ結果になる 空白やコメントも含めてPPIがPerlスクリプトを解析した結果を保持する 大体のPerlプログラムを解析できる At time of writing there are only 28 non-Acme Perl modules in CPAN that PPI is incapable of parsing. 解析出来なかったものはそもそもぶっ壊れているモジュールだったとのこと
useに相当するPPI::Element perlimports は use をいい感じにするモジュール use がPPI::Elementでどう表現されるかを把握しておくと何をやっているかがわか りやすい PPI::Statement::Include があり、以下の例はすべて Statement::Include として 解釈される use 5.006;
perlimportsの処理を眺める 実際に use を解析している箇所を眺めてみます findメソッドで指定した条件に一致するPDOMを取り出す事ができる これは PPI::Statement::Include でかつ use のものを指定している 先程まで見ていたケースのPDOMを取り出す sub _build_original_imports {
#...
my $found = $self->ppi_document->find(
sub {
$_[1]->isa('PPI::Statement::Include')
&& !$_[1]->pragma # no pragmas && !$_[1]->version # Perl version requirement