• ベストアンサー

binmode の取り消し

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

  • Perl
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
回答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

  • 改行コードを変換せずにアップする際の不具合

    FTPでアップする際の改行コードについてお教え下さい。 Windowsの改行コードのまま(バイナリーモード)にてunixサーバーへアップロードすると apacheやphpなどモジュールやhtmlの表示で不具合が発生することはありますか? 目的として、バイト数で差があるか確認したいので、crlf > lf 変換をしたくありません。 どなたかご教授頂けますと助かります!

  • Solaris上のC言語でCRLFのファイル作成は

    こんばんは。 Solarisの環境下で、 ファイルをオープン&編集&別ファイルを作成する処理において、 改行コードをCRLFにしたいと考えています。 プログラムはC言語で作成されています。 生成後のファイルは、文字コード:EUC、改行コード:LFで作成されています。 今回は、文字コード:SJIS、改行コード:CRLFで作成したいです。 現在、「\n」で、改行コードをLFとして作成しているようです。 この改行コードをCRLFにしたい、という意味です。 ファイルレコードの行末に「\n」を入れている処理の個所を、 「\r\n」に変更すれば、CRLFになるのでしょうか? プログラミング言語の仕様というよりは、 その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、どうでしょうか? よろしくお願いします。

  • 改行コードCR(\r)をアンダースコア(_)に変換

    AIX、Kシェルです。 ファイルに出力された改行コードCR(\r)をアンダースコア(_)に変換したいのですが、 文字コードSJISだと期待通りの結果になるのですが、UTF-8だと全角の手前で止まってしまいます。 試したコマンドは下記です。 cat file.txt | tr "\r" "_" > tmpfile ex) file.txt(最終行は半角spaceと全角space) 10(改行コード=LF) 11(改行コード=CRLF) 12(改行コード=CR) 1(改行コード=LF) 2(改行コード=CRLF) 3(改行コード=CRLF) ああ(改行コード=CRLF)  (改行コード=CR) 【結果】tmpfile 10(改行コード=LF) 11_(改行コード=LF) 12_1(改行コード=LF) 2_(改行コード=LF) 3_(改行コード=LF) ああ_(改行コード=LF)  _ これがUTF-8だと12までは変換できるのですが、以降が出力されません。 UTF-8でも最後まで変換されるようにするにはどうすれば良いのでしょうか? 初心者で申し訳ありません。 お手数ですが、何卒宜しくお願い致します。

  • CGIをアスキー転送モードでアップすると「Internal Server Error」となります。

    CGIをダウンロードして、サーバーにアップロードしたのですが、 CGIが作動せず、「Internal Server Error」となってしまいます。 KENTのフリーCGIほか、いろいろなCGIで試してみても同様です。 転送モードやパーミッション等の基本的な設定は間違っておりません。 他のサーバーであれば、問題なく動きました。 いろいろと試したところ、どうやら改行コードの問題のようだったため、 ダウンロードしたCGIファイルを、エディタにてLFに変換して保存し、 バイナリ転送モードにてアップロードしたところ、作動しました。 通常であれば、このようなことをしなくても、ダウンロードしたCGIファイルを アスキー転送モード(もしくは自動)でアップロードすれば 作動すると思うのですが、この原因は何なのでしょう? サーバー側の設定の問題なのでしょうか? どなたかもし分かりましたら、ご教授お願いいたします。

    • ベストアンサー
    • CGI
  • 改行コードを自動変換してくれるFTPクライアント

    テキストファイルをアップロードするときに、改行コードを自動変換してくれるFTPクライアントを探してます。 今まではFFFTPを使用していたのですが、このソフト、自動で改行コードを変換してくれないようです。 サーバーの漢字コードにEUCを選択し、転送モードをアスキーにして転送してみましたが、改行コードはCRLFのままでした。 テキストファイルのアップロードではFTPソフトが自動で改行コードを変換してくれるものだと思い込んでいたのですが。。。 やりたいことは、Windowsで作ったS-JIS/CRLFのテキストファイルを、漢字コードはS-JISのままで改行コードだけをLFのみに自動変換してLinuxサーバーにアップロードしたいのです。 質問としては、 (1), FFFTPで、自動で改行コードのみを変換し、漢字コードはそのままでアップロードする方法がありましたら教えてください。 (2), もし、(1)ができないようでしたら、他のソフトでお勧めがありましたら紹介してください。 できれば、FFFTPのように、ビューワにメモ帳など自分の好きなアプリケーションを指定できる機能があれば助かります。 宜しくお願いします。

  • 改行コード2つを1つに変換したいです

    HTMLをFTPでアップロードした際、アスキーとバイナリを間違えたのか改行が連続2つになってしまいました。 元のファイルを消してしまったため、改行コード2つを1つへ置換したいのですが実現できるWindowsソフトを探しているのですがCR+LFをLFに変換するソフトはあってもLF+LFをLFに変換するソフトが見当たりません。 実現できるソフトはありますでしょうか? ファイルがかなりたくさんあるので、ディレクトリ毎に置換できるソフトが希望です。

  • ファイルのアップロードについて

    はじめまして。CGIにperlを使用して、ブラウザからファイルのアップロードを実現させようとしています。 binmode ( STDIN ); read ( STDIN, $tBUF, $BUFSZ) のようにして読み込み、バイナリーモードで書き出しています。 画像系はうまくいくのですが、テキスト系をアップロードするして、アップロードしたものをFTPソフトでASCKIIモードでダウンロードすると、どの文字コードの場合でも、一行ごとに余計な改行がひとつはいってしまいます。 バイナリーモードだとうまくいきます。 FTPソフト NextFTP2.02 使用OS:windows2000 workstation サーバーのOS:SunOS 5.8 ちなみみにサーバーがRedhat5.0のときはうまくいきました。 こういった原因はが、さっぱりわかりません。誰か教えてください。

    • ベストアンサー
    • CGI
  • データ転送時の文字列について

    PDFファイルをデータC++でのCGI転送しWeb上で表示するのですが 先頭に改行コード(LF:バイナリコード”OA”)が勝手についてしまいます。 なぜか分かりません。 先頭のLF(改行コード)の削除する方法、もしくは根本的な対応など IE、ACROBATの情報などありませんでしょうか? VBオンリーのものでしてVBでのMID関数みたいなものは無いかと探してはいるのですが… よろしくお願いいたします。

  • FTP受信する際、改行コードをはずしたいのですが

    汎用機からPCにFTPで受信する際、改行コード(CRLF)をつけずに受信したいのですが、typeをasciiにすると自動で改行コードがついてしまうのでしょうか? はずす方法がわからず困っています。 ご存知な方教えてください。

  • 改行コードについて

    改行コードがよく解らないので説明お願いします 様々なサイトの改行コードの説明で LinuxはLF MacはCR WindowsはCRLFと説明しています 私の認識では LF=\n CR=\r CRLF=\r\n だと思っていました ここで疑問なのですが 確かに私の利用した環境ではLinuxの改行コードは\n, Windwosの改行コードは\r\nでした ところがMacの標準のメモ帳(テキストエディット)で文字を入力しても改行コードは\nです 確認方法は od -cというコマンドとfileというコマンドです これはつまりCRではなくLFということですよね? では、なぜ多くのサイトではMacはCRと説明しているのでしょうか? そもそもCR=\rという認識が間違ってるのでしょうか? よろしくお願いします

専門家に質問してみよう