WindowsでずっとPerlをやってきたわけですが、Mac(OSX)になって大きく違いを感じるのが、改行コードとパーミッションです。
改行コードの問題については分かっていたはずなのですが、FFFTPの設定によってテキストモード(ASCIIモード)でアップロードされるので、あまり意識していませんでした。
昔は、エディタの改行コードをUNIXタイプ(LF)という風に設定していたのですが、いつの間にかWindowsタイプ(CRLF)になっていたようです。
で、Macになってローカル環境で実行したときに、こんなエラーが出たので、改行コードの違いに気づきました。
/usr/bin/perl^M: bad interpreter: No such file or directory
そこで思い出したのが、改行コードを変更するワンライナーでした。
と言っても、ワンライナー自体を思い出したのではなく、そういうワンライナーがある、という記憶を思い出しただけです。
ググって調べた結果に、少しの知識を加えてできたのが、以下のワンライナーです。
$ find . -name "*.cgi" | xargs perl -i.bak -pe "s/\x0d\x0a/\x0a/g"
ググッてみると、最後の「g」がなかったり、\x0dと\x0aの事を「\r」「\n」という風に書いていたり、という、ちょっと残念な感じのワンライナーもしばしば見受けられました。
本文のすべての改行を変更するので、置換処理の繰り返し「g」は必要だろうし、\rや\nは改行コード自体を置換するのには不向き、という話があったと思うので。
また、0d0aは時々8進数で(\015\013とか。)書いてあったりするのですが、私の中では16進数で覚えていることもあって、とっさに8進数では出てこないです
。
で、このワンライナーを実行すると、バックアップファイルを作成してもらえるので、もし何かあっても安心ですね。
バックアップファイルを消すときは、こんな感じで。
$ find . -name "*.cgi.bak" | xargs rm