Perlで改行コードの変換に挑む

改行コードを変えたいだけなんです


by fancycrave1
仕事で大量にあるテキストファイルの改行コードをLFからCRLFに変換をかけたいけどどうしよう…と言うことがありました。
もともとPowerShellの取得プログラムがあったのでそこに組み込むかと言うことで組み込みはしましたが、ふとテキストの扱いならPerlのほうが早いんじゃないのかと急に思い出し作ってみました。
なお、本当であればファイルサーバーにFTPとかが使えればアスキーモードで取得すれば楽に行けるんですがそうはいかなかったんで変換プロセスを組み込みました。

ご注意

Perlに関してはど素人で10年以上前にちょろっと触ったっきりです。
コードに関してはググってコピペしたつぎはぎ状態のものになり、有識者に言わせると頭を抱えるようなものになっているはずです。

全体の流れ


作業の全体像をとりあえず書いておきます。

  1. ファイルサーバーより定期的に改行コードLFのテキストファイルをSamba経由でコピーしてくる。
  2. WindowsPCの所定場所に保管。
  3. 改行コードをCRLFに変換する。
  4. まとめて月次リポート的な使い方をする。

Perlで書いてみた

PowerShellから実行

おおもと。PowerShellより引数付きでPerlを実行しています。
なお、PowerShellに関しては抜粋になります。
引数にはディレクトリを指定しその配下にあるすべてのファイルに対して改行コードの変換をかけています。

Start-ProcessでPerlを呼び出すと即次に行ってしまうのでWait-Processで待たせるようにしています。
また、Perlの画面が出てくるのでHiddenで隠しています。

Perl部分

続いて、問題の改行コード変換Perl。
ファイル名は「converter.pl」という感じにしてあります。
「use strict」と「use warnings」を入れているのでお作法には厳しくなっています。
そのため、肝心の改行コード変換部分では警告が出てしまってます。
とりあえず、動いているからまぁいっかというダメプログラムっぷり。
周りに聞いてもPerlなんてわかんねと言う人ばっかりだったのでこれで良しとしています。
わたしも、何やってるかさっぱりです。知ってる人からするとひどいもんなんでしょうね。

警告の部分は「関数がくるべきとこに関数が来てなくて、変数とかがきてるよ」といった感じの警告だそうです。
とはいうもののさっぱりです。

PowerShell VS Perl

とりあえず、動いているPerlですがPowerShellと比べるとどうなのかと言うとあくまで体感レベルまとめました。

  • Perlのほうが処理速度は速い。
  • PerlのほうがCPUの張り付きが無い。

RubyとかPythonとかにすると新しい分速度が変わったりするんでしょうか?

最後に

とりあえず、「Perl 改行コード変換」でググっても1行でやるワンライナーの書き方ばっかりで特定ディレクトリ配下にあるものをすべて変換したい!と言う時にどのように書いたらいいのかが非常に苦労しました。
ど素人のつぎはぎの超適当なプログラムなので仕事で使うのはどうかと言う話もありますが、今のところ動いているのでよし!としています。
参考にする人なんていないと思いますが、参考までにどうぞ。何かの足しになるかもしれません。