まず,元のテキストを見て,訂正がない文の形式的特徴を読み取る。訂正がない文の場合,次に * あるいは @End が来るので,連続する2行をチェックし,条件に合えば,"\%ntv:\t(訂正なし)\n" を挿入するようすればよい。
現在処理中の行は $_ で参照できる。前の行を表わす特殊変数はないので,自分で変数を作り,その中に記録しておく。下のスクリプトでは,$prev という変数に,前の行の内容が収められている。1行目を読み込んだ時点では,while ブロックの最後の $prev = $_ は一度も実行されていないので,$prev は未定義となっている。
plscript/insertNC.pl
--------------------------------------------------
while (<>) {
#前の行の先頭が *,$_ の先頭が * または @End なら
if ($prev =~ /^\*/ and $_ =~ /^(\*|\@End)/) {
#次の一行を挿入
print "\%ntv:\t(訂正なし)\n";
}
#$_ を出力する
print;
#$_ の内容を $prev の新しい値とする
$prev = $_;
}
exit;
--------------------------------------------------
Perl では @, % に特別な意味があるので \ でエスケープしている