改行コードが混在したファイル群の処理
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( ){ #ファイル処理 }
としてやれば、ファイルの改行コードに触る事なく中身のデータの処理が可能
ポイントはファイルの改行コードをチェックして、$/を当該の改行コードに設定してやること。