さっきまでPerlのスクリプトと格闘していてやっと問題が解決(?)したので、対処方法をメモしておきます。でも、まさかこんなことが起き得るんですね。
さて、その問題とはコマンドライン引数に改行文字が含まれるという問題。簡単にどんなシチュエーションでこの問題が起こったかを説明します。
まず、PCが2台あります。1つをPC_A、もう1つをPC_Bとします。
PC_A(WinXP 32bit)でPerlスクリプトとそれを何度も呼び出すシェルスクリプトを作成し、PC_B(WinXP 64bit)で実行します。そのプログラムの概要はだいたい以下の通り。
実行環境はCygwinで、Perlのバージョンは5.8.8(64bit)です。
#!/usr/bin/perl my $a = $ARGV[0].".ext"; my $b = $ARGV[1].".ext"; my $c = $ARGV[2].".ext"; print system("java -jar jarfile.jar $a $b $c");
以下がシェルスクリプト*1です。(本当はこんな規則正しいパラメータの与え方をしているわけではありません。)
./perlscript.pl 10 10 10 ./perlscript.pl 10 10 20 ./perlscript.pl 10 10 30 # 以下同様... ./perlscript.pl 30 30 30
で、実行させようとすると、なぜかPerlスクリプトでの最後のコマンドライン引数がおかしなことになるのです。表示させてみると、どうやらcarriage returnが入っている模様。(表示が上書きされてたりするので。)
いろいろ試した結果、シェルスクリプトの行末に半角スペースを余分に入れることで対処。
でもこれまでこんな問題にぶつかったことがなかったので、かなり戸惑いました。