• ベストアンサー

ダイアモンド演算子<>に対する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; ではダメでした。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ちょっと検索してみた. ま, 無保証ですが.

参考URL:
http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=3193
loverevo20
質問者

お礼

ありがとうございます。 binmodeでなくてPerlIOを使う方法ですね。 INでなくてIOを指定すれば STDOUT の改行自動変換も抑制されますね。 貴重な情報ありがとうございます! <>にbinmodeを利かせる方法をご存知の方、継続してお願いします。

その他の回答 (1)

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

私も先日改行の自動変換で不具合に見舞われましたが、以下で切り抜けました。 @array = map { s/\r//g; $_ } @array; または $_ =~ s/\r//g;

loverevo20
質問者

お礼

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

関連するQ&A