で、ジュンク堂で立ち読みし調べたところ、どうやらUnix、Win、Macの改行コードの扱いに原因らしい。
WinはCR+LF、MacはCRのみは良く知られている。そのためCR=¥n、LF=¥rと思っていたが、実際はCR=¥r、LF=¥nだった。
となると
s/^1¥nsO$¥n0¥s0¥s0¥s1¥sK//g;は
s/^1¥nsO$¥r0¥s0¥s0¥s1¥sK//g;で除去されるはずと思ったが、Perlメモをよく読むとこのように書いて正常に動作するのは Windows(DOS) と UNIX の perl のみで,Mac の perl では正常に動作しません.よく「改行コードは Windows(DOS) では ¥r¥n,Mac では ¥r,UNIX では ¥n である」という人がいますが,これはある意味正しいと言えなくもないのですが,根本的には間違っています.」とある。
汎用性あるやり方はPerlメモに紹介されているように改行コードを最初に統一しなくてはならない。
わかりやすく書くなら
s/¥x0D¥x0A|¥x0D|¥x0A/¥n/g;なのだが
スピードを優先させるなら
s/¥x0D¥x0A/¥n/g;
tr/¥x0D¥x0A/¥n¥n/;
Mac環境で完結するのであれば
s/¥x0D/¥n/g;でいけるはず。

1 件のコメント:
うまくいかなんだ。。。orz
コメントを投稿