汎用リネーマー(diagnostics)

ラリーおじさんが作ったらしい。怖いからちょっと確認する。

#! /usr/bin/perl
use strict;
use Fcntl;

#evalの対象を読み込み格納
my $oparate = shift
		or die "引数の一個目をevalします、2つめの引数を@ARGVで読み対象リストにします";

#ログファイルの用意とハンドル
my $file = "rename$$.log";
sysopen my $log,$file,O_WRONLY | O_TRUNC | O_CREAT
		or die "canot open log :$!\n";

#リネームループ
for(@ARGV){
	my $targ = $_;#変更前の名前を格納
	
        eval  $oparate;#$_に対してevalする
	die $@ if $@;#eval失敗でdie
        
        #リネーム確認部分
	print $targ," rename ",$oparate," -> ",$_,"\n";
	print "rename OK? [y/n]";
	my $confirm = substr(<STDIN>,0,1);#冗長ですね
        
        #ログ書き込みとリネーム
	if($confirm eq 'y' || $confirm eq 'Y'){
		print $log qq("$targ"\,"$_"\n);
		rename($targ,$_) unless $targ eq $_;#リネームが同じならやめちゃうよ。
	}else{print "cancel\n"}
}

close $log;

undoないから使うのが怖いな。
リストに変更前と変更後をもてたらよいのかもしれない。csvっぽい形式で書き出しとく