• ベストアンサー

binmode の取り消し

binmodeを使用したファイルハンドルを閉じずにバイナリモードを 取り消してアスキーモードに戻す方法はないでしょうか。 CGIモジュール(CGI.pm)を使用するとモジュール内部で勝手にSTDOUTに binmodeしてしまうようで、改行コードがLFだけになり(少々だけ) 困っています。 CGIモジュールを使用してもbinmodeされない方法かアスキーモードに 戻す方法があったら教えて欲しいです。 まあ、実際にはCGIを使用している限りではあまり関係ありませんが。 CGIモジュールを直接は使用していないのですが間接的に利用している CGI::Sessionモジュールを使用したいのです。 因みに使用環境はWindows(IIS)ですので改行コードはLFのみではなく CRLFの方が都合がいいと思っています。 今のところ、LFになっていても一応は動いていますが必要なくSTDOUTが バイナリモードにはしたくないという程度ですので、ないようでしたら 諦めます。

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

  • ベストアンサー
回答No.2

binmode FILEHANDLE, ":raw"; # バイナリモード binmode FILEHANDLE, ":crlf" # テキストモード 第2引数を省略すると ":raw" が指定されたものと解釈され、バイナリモードになりす。

参考URL:
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
pick52
質問者

お礼

euthanasia さんの方法でできました。 回答していただいてありがとうございます。

pick52
質問者

補足

ありがとうございます。 おー、こんな指定があったんですね。 Perlの説明書(?)はよく分からなくてほとんど読んでいませんでした。 大抵のサイトにはこのbinmodeでバイナリモードにすると戻せない というようなことが書いてあったりして第2引数についてはまったく 記述がないので知りませんでした。 後で試してみます。 あと、逆にUNIX/Linuxの環境ではまったく影響ないんでしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

やったこと有りませんが CGI.pmの(うちのでは163行目) $needs_binmode = $OS=~/^(WINDOWS|DOS|OS2|MSWin|CYGWIN)/; ↑この行をコメントアウトしてみて、エラーが出なければ binmodeは回避されると思います

pick52
質問者

お礼

euthanasia さんの方法でできました。 回答していただいてありがとうございます。

pick52
質問者

補足

ありがとうございます。 しかし、CGIモジュールはPerlの標準モジュールな上に個人のサーバ ではないため、勝手にファイルの中身をいじるのは少々避けたいです。 (アップデートをすると戻ってしまうなどの問題もありますし) CGI.pmをCGIスクリプトファイルの下に置くという手もありますが、 その場合の優先されるモジュールが安心できないという点やファイルが 無駄に重複するので、やはり避けたいと思います。 説明不足ですみませんでした。 なんか、呼び出すスクリプト側の方で何か対処できるのが一番いいと 思います。

すると、全ての回答が全文表示されます。

関連するQ&A