- ベストアンサー
ダイアモンド演算子<>に対するbinmodeについて
お世話になります。 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; ではダメでした。 どうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと検索してみた. ま, 無保証ですが.
その他の回答 (1)
- kuroizell
- ベストアンサー率55% (95/170)
回答No.2
私も先日改行の自動変換で不具合に見舞われましたが、以下で切り抜けました。 @array = map { s/\r//g; $_ } @array; または $_ =~ s/\r//g;
質問者
お礼
ありがとうございます。 読み込んだ後にデータを直で使う方法ですね。 これもいいですね!
お礼
ありがとうございます。 binmodeでなくてPerlIOを使う方法ですね。 INでなくてIOを指定すれば STDOUT の改行自動変換も抑制されますね。 貴重な情報ありがとうございます! <>にbinmodeを利かせる方法をご存知の方、継続してお願いします。