蛙の井戸見聞記 Pretty frog in a well who knows nothing of the great web ocean!

~~ 好奇心は猫をも殺す Curiosity Kills the Cat ~~ ♪欲しいモノ・食べたいモノ・ネットで集めた情報と日々の記録の倉庫♪ Logging my life... Since 2003.12  

改行コードが混在したファイル群の処理

UNIX,Mac,Winの改行コードが混在したファイル群を処理するのに、いちいち処理先のファイルの改行コードを変更していると面倒。
例えばある名前のついたファイルを探し出してきて処理をするperlスクリプトを書く際に、コマンドラインからは

find . -name "somename" ! -regex ".*/sometype/.*" -print |./somescript.pl

と入れるとすれば、

while(<>){
chomp; push(@FLIST,$_);
}
while($FLIST = shift @FLIST){
	open(FLIST, $FLIST) or die "cannot open $FLIST: $!\n";
	@file_all = ;
	if($file_all[0] =~ /\n/s){$/ ="\n";}#"UNIX";
	if($file_all[0] =~ /\r\n/s){$/ ="\r\n";}#"WIN";
	if($file_all[0] =~ /\r/s){$/ ="\r";}#"MAC";
	seek(FLIST,0,0);
	while(){
	#ファイル処理
}

としてやれば、ファイルの改行コードに触る事なく中身のデータの処理が可能
ポイントはファイルの改行コードをチェックして、$/を当該の改行コードに設定してやること。