ただいま perl で画像アップロード機能を作成中でして。んで、ベタに CGI.pm でサクっと実装したら、何かアップロードしたファイルがぶっ壊れるじゃないですか。何故。
#!/usr/local/bin/perl -l
use CGI;
my $q = new CGI;
my $uploadfile = $q->upload('photo');
$path = "./image/photo.jpg";
open (OUT, ">$path");
binmode OUT;
print OUT while (<$uploadfile>);
close (OUT);
close ($uploadfile) if ($CGI::OS ne 'UNIX');
chmod (0666, $path);
exit;
実際には mime によって拡張子を判定したりしなくちゃいけないんだけど、大体こんな感じ。もうね、どこが悪いのかサッパリ分からないわけですよ。
で、イジり倒していたら、原因は "-l" オプション。コイツを消したら、キレイに動きましたよ。って、マジでかあ。バイナリデータの途中で勝手に chomp したりしちゃって、おかしくなっていたんだよね。言われれば、分かる。分かるんだけどさ…ううう。
正規表現やらリファレンス渡しやらで、何回かハマって時間を無為にしてきたけど、これは本当にハマりまくった。まあ、良い勉強になりましたです。ハイ。