ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと

お世話になります。
ActivePerlでは、UNIXのPerlとの互換性を持たせるために、Windows改行\r\n(0x0d0a)を読み込んだら\n(0x0a)を読み込んだように、\n(0x0a)を書き出したら\r\n(0x0d0a)を書き出したように動作します。
この動作を抑制するためには、binmodeを使います。
ところが、
binmode STDOUT;
のように行うと、確かに標準出力で普通に\nを出力すると、0x0aが出力されるのですが、<>(ダイアモンド演算子)に関しては、なんと言うファイルハンドルにbinmodeを使っていいかわかりません。
どうすればいいでしょうか。

具体的にいうと、以下のようなファイルをダンプするプログラムで、現状では0d0aが0aと表示されます。

#! perl
#fileDump.pl

while (<>) {
for (split //) {
print unpack "H2", $_;
}
}

PerlのマニュアルによるとARGVというファイルハンドルを使っているという話がありましたが、

binmode ARGV;

ではダメでした。

どうぞよろしくお願いします。

A 回答 (2件)

ちょっと検索してみた.


ま, 無保証ですが.

参考URL:http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard …
    • good
    • 0
この回答へのお礼

ありがとうございます。
binmodeでなくてPerlIOを使う方法ですね。
INでなくてIOを指定すれば STDOUT の改行自動変換も抑制されますね。
貴重な情報ありがとうございます!

<>にbinmodeを利かせる方法をご存知の方、継続してお願いします。

お礼日時:2010/03/12 10:36

私も先日改行の自動変換で不具合に見舞われましたが、以下で切り抜けました。



@array = map { s/\r//g; $_ } @array;
または
$_ =~ s/\r//g;
    • good
    • 0
この回答へのお礼

ありがとうございます。
読み込んだ後にデータを直で使う方法ですね。
これもいいですね!

お礼日時:2010/03/12 10:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!