>>2082 猫じゃらし ちゃんと環境を書きましょう。Windows ですか? 1. ヘッダもそのまま 2.gif に出力してしまう。 2. 改行が入ってしまうなら、Windows でテキストモードになっているのかも。 ということで、 # ヘッダまでを読み飛ばす while (<$remote>){ last if ( $_ eq "\n" || $_ eq "\r\n" ); } # ここからが画像データ while (<$remote>){ $outdata .= $_; } open(OUT, "> 2.gif"); binmode(OUT); print OUT "$outdata"; close(OUT); でどうでしょう。 foreach を使わず while を使うのは、foreach の () 内はリストを要求する ので、<$remote> はリストコンテキストで評価され、 foreach ("1行目のデータ", "2行目のデータ", ..., "最終行のデータ"){ と展開されてしまうからです。よって、 foreach (<$remote>){ last if ( $_ eq "\n" || $_ eq "\r\n" ); } の時点でファイルハンドル <$remote> から全てのデータを読み 切ってしまうので、last で抜けた後には <$remote> という ファイルハンドルにはデータが残っていません。 foreach (scalar(<$remote>)){ で強制的にスカラーコンテキストにするならいいんですが、 この場合は素直に while を使った方がよいでしょう。 |