実行された各行、現在のファイル名、および対応する行番号を出力する、独自の小さな Perl デバッガーを作成しました。現在の Perl ステートメントに汚染されたデータが含まれているかどうかを検出するにはどうすればよいですか?
モジュール Scalar::Util から「汚染された」関数があることは知っています。ただし、Perl ステートメントではなく、変数名のみをパラメーターとして受け入れます。
レキシカル変数に Taint を付けてトレースしました。ステートメントが汚染されているかどうかを確認できれば、汚染された変数を含む行のみを出力できます。これが私のカスタム taint スクリプトです。
Taint.pl
use strict;
use warnings;
use Taint::Runtime qw(taint_start taint);
taint_start();
my $data = taint("abc"); --> interesting
my $noise = "noise"; --> not interesting
my $evil = $data . " evil"; --> interesting
Debugger.pl
sub DB::DB{
my($package, $filename, $line) = caller;
print $filename . ":" . $line . " ";
scalar <STDIN>;
}
1;