• ベストアンサー

perl 出力について

Win98SEのDOS窓で、たとえば perl -w a.cgi というふうにするとエラーなどがDOS窓に出力されると思いますが、それがたくさんあるとスクロールして上のほうが見れないんですがどうすれば見れるのでしょうか? >a.txt などと付け加えると処理結果(?)はファイルに出力されるのですが、エラーのメッセージなどはファイルに出力されません、DOS窓に表示されたままです。 よろしくお願いします。

  • solee
  • お礼率75% (3/4)
  • Perl
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • cocky
  • ベストアンサー率57% (232/402)
回答No.2

エラーについては、標準出力(STDOUT)ではなく標準エラー出力(STDERR)に出力されてしまうので、DOS/Windows系の場合はコマンドラインから変更するのは難しいでしょう。 どうしてもファイル等に保存するのであれば、プログラム中でSTDERRの出力先をopenコマンドなどで変更してしまう(「open( STDERR, "> error.txt" );」のような形)しかないんじゃないでしょうか。試したことがないのでできるかどうかもわかりませんが。 むしろそれよりは、Perlのデバッグモードを使った方がいいんじゃないですか? 「perl -d a.cgi」というような形で起動できますし。コマンドの使い方はプロンプトで「h」で出力できます。

solee
質問者

お礼

ご返答どうもありがとうございます。 上記のように「open( STDERR, "> error.txt" );」をスクリプトの2行目に入れてみました。結果はちゃんとファイルに出力されたのですが、-w をつけたとき、DOS窓では変数が一回しか使われていないときのエラーが表示されるのに対し、STDERRでファイルに出力した方ではそれが書かれていませんでした。定義していない変数の警告はどちらの方法でも出力されていました。 使い方等よくわかっていないのですが、これから試してみようと思います。 デバックモード・・・これもDOS窓だとスクロールして上の方が見えないような・・・といいますか、手軽にエラーを見るのが目的だったんです。ということで、ちょっとパス(汗)。ありがとうございます、いろいろ参考になりました。

その他の回答 (1)

  • hequil
  • ベストアンサー率65% (242/372)
回答No.1

perl -w a.cgi > err.txt とすれば、画面の代わりにerr.txtに結果が書き込まれます 画面で確認したいのであれば perl -w a.cgi | more で一画面ごとに表示が止まり、何かキーを押すと 次の画面に移ります。 こんなところでしょうか? 参考まで

solee
質問者

お礼

ご返答どうもありがとうございます。 moreを使うと一画面ごとに表示がとまりました。 しかし、エラー表示のときだけ2~3秒でページが自動的に切り替わってしまうんです。これは何かの陰謀なんでしょうか。

関連するQ&A

  • Perl 時間同士の差

    恐れ入ります。 Perlを使って、時間と時間の差を求めたいのですが、 なかなかうまくいきません。 一度、txtファイルに書き込み日時を保存したあと、 それをperlにて読み込み、現在時刻との差を出して投稿制限を掛けたいのですが、 どのようにしたらよろしいでしょうか。 現在書き込み日時はtxtファイルに保存し、cgiファイル上に、出力済みで、localtimeも出力済みです。 単純に引いて関数に代入しても、正しい時間を得られません。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlでの出力先設定

    perlの出力結果を.txtにして出力しているのですが、出力先が.plのあるところ以外に指定することはできるのでしょうか? <STDIN>でtxtデータを読み込んでいるのですが、例えば入力したtxtがCドライブのAというフォルダにある場合Aのフォルダ内に出力結果を出し、WドライブのBというフォルダのtxtを入力した場合はBのフォルダ内に出力結果を出したいです(入力したtxtと同じ場所に出力したい)。 わかる方がいたら教えてください、お願いします。m(_ _;m)

  • 1つのプログラム内で"html出力"の部分とそれ以外の処理部分の共存

    1つのプログラム内で"html出力"の部分とそれ以外の処理部分の共存 こんにちわ。 ・リロードイベントをキャッチしたhtmlからリクエストをcgiが受信(html出力部分) ・カウンタ値を保存しているtxtファイル(data.txt)から現在の値を読み出す ・+1してファイルにまた値を書き込む ・その値をhtmlにも返して表示させる(html出力部分) といった具合のプログラムを作りたいのですが、html出力をしている部分とそのほかの処理を同じcgiファイルに入れているとうまく動かないみたいです。 以下が問題のファイルの中身です。 (test.cgi) #!/usr/bin/perl open(IN, "../html/2010/data.txt"); my $counter=<IN>; close(IN); $counter++; open(OUT,"> ../html/2010/data.txt"); print (OUT "$counter\n"); close(OUT); print "Content-type: text/html\n"; print "\n"; read(STDIN, my $data, $ENV{'CONTENT_LENGTH'}); print "$counter\n"; ページをリロードして処理を確認するとdata.txt内の値は変わらないまま、それに1を足しただけの値が表示されます。しかしdata.txtの中身が0でサーバのコマンドラインで perl test.cgi といった風に動かしてみると Content-type: text/html 1 といった感じに今度はちゃんとdata.txt内の値もちゃんと書き換えられて出てきます。 html出力部分とdata.txtの書き換え部分は分離させたほうがよいのでしょうか?分離しなければいけない場合は互いのデータの受け渡し方法もご教授お願いします。

    • ベストアンサー
    • CGI
  • perlについて、教えてください。

    perlについて、教えてください。 「apple.html」と「bigin.html」に、それぞれ, textboxが一つあり、入力値をkeep.cgiで受取り、 「keep.txt」に書込もうと考えています。 a.htmlのテキストボックスに、入力して、submitボタンをクリック しても、「keep.txt」に何も書き込まれません。 「keep.txt」に、 _______ a=100 b=200 ________ のように、書込みたいと考えています。 下記、keep.cgiのどこが間違っているのか、教えてください。 ___以下、「keep.cgi」です。_______________________________ #! c:/perl/bin/perl if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } #$queryに「●_text=●」が入っている。 #ファイルを開く、読み書き用。 $open_file_name = "+<keep.txt"; open(A,$open_file_name); #開いたファイルを、1行ずつ読み込む。 while(<A>){ #$_には、keep.txtの、1行目が入っている。 #$_(読込んだ行)に「●_text」があるか、チェックする if($_ =~ /$query/){ #あった場合 next; } #読込んだ行に、$query以外なら、配列に。 @keep = $_; @keep = $query } #ファイルを閉じる。 close(A); #ファイルを削除する unlink($open_file_name); #削除したのと、同じファイル名で新規作成 $new_file = ">>keep.txt"; open(A,$new_file); #再度、作成したファイルに、配列@keepを書込む。 print A @keep; #ファイルを閉じる close(A); print "Cotent-type:text/html\pirnt n\n"; print <<EOF; <body bgcolor="pink"> <font size="4"> 入力値をファイルに書込みました。<br> </font> EOF exit; ______________________ 宜しくお願いします。

    • ベストアンサー
    • CGI
  • Windowsでperl/tkに挑戦

    windows 98SE 上で perl/tk を使って GUI プログラミングに挑戦!と思ったのですが、 MainWindow が出る前に、必ず DOS窓が一瞬現れて消えるのが、どうも気になります。 この DOS窓を出さない方法はあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • perl 計算結果をファイルへ出力したい

    perl やり始めたばかりです。宜しくお願いします。 入力ファイル data.txt があるとします。 data.txt は、 123 456 789 333 555 777 以上のようなテキストファイルといたします。このファイルを 以下の様に100分の1にして出力したい。 1.23 4.56 7.89 3.33 5.55 7.77 と言うことで、この場で教えていただきました。それが、以下です。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); foreach $line (@x){ chomp($line); @elms = split(' ',$line); foreach $data (@elms){ print $data/100," "; } print "\n"; } おかげ様でこれはこれで上手く動きました。そこで、出力値をファイルに 書き込みたいのです。 もちろん、以下の様な方法でファイルに 書き込めるのは判っております。 計算プログラム.pl > outfile.txt しかし、上のプログラムをベースにファイルに書き込めないかと色々と 試してはみましたが、どうも上手く行きません。 どなたか教えて頂けないでしょうか? 宜しくお願い申し上げます。

    • ベストアンサー
    • Perl
  • cshからperlを呼び出しファイルに出力

    いつもお世話になっております。 cshからperlを呼び出しperlが出力する内容と入力項目を実行しているcsh内部で行ない結果をファイルへ出力したいのですが、そのような事ができるのでしょうか? ---------- cshファイル内 #!/bin/csh echo "●perl a.pl を実行します" | tee a.log perl a.pl ---------- perlファイル内 (perlがわかりませんので、perlの内容をcsh形式で記述させていただきます) (1)echo -n "日付を入力して下さい" (2)echo "⇒ " (3)set INPUT_DATE = $< (4)echo "日付:$INPUT_DATE " exit 0 ---------- cshから実行されたperl(csh)の内容[(1)(2)(3)(4)]をファイル(| tee a.log)へ出力することが可能でしょうか? ご存知の方がいらっしゃいましたらご教授願います。

  • Perlの文字列削除とcsv出力の方法について

    現在、Perlを用いてtxtファイルから必要なデータだけを取り出し、それをcsv ファイルに出力したいと考えております。 Perlはほとんど触ったことがなく、色々と勉強しながら行っているのですが、期 日が迫っているという事情もあり質問させていただきます。 txtファイルには以下のような文が1000行ほどあります。 *○ △ /△/△/△/△/○.txt, ○|○): ○ ○,△:任意の数字、または文字列です。 この内、"○"のものだけを一つ一つ分けてcsvに出力したいのです。 つまり○は4つありますが、出力する際は1つ目の"○"を1行目に、2つ目の"○"を2行 目にといった形にしたいです。 そして、それが1000列分あるということになります。 上手く△のものだけを除外し、○だけを抽出する方法はあるでしょうか? どなたかよい方法をご存知のかたいらっしゃいましたら、教えていただけると幸 いです。 エクセルで行うということも考えましたが、htmlファイルが入力ファイルとなる可能性もあるためPerlで行うことにしました。

    • ベストアンサー
    • Perl
  • PERL 宣言文 -wについて

    Perl初心者のWEBサーバエンジニアです。 サーバの移行に伴ってCGIファイルが動作していないため、ご相談になります。 【サーバ環境】 perl実行パス      /usr/local/bin/perl シンボリックリンク   /usr/bin/perl => /usr/local/bin/perl ソース記述       #!/usr/bin/perl ヴァージョン      5.8.5 perl実行環境      http://△△△.jp/cgi-bin/ ※apacheのスクリプトエイリアス指定 options +ExecCGI -Include SetHandler cgi-script 上記の環境で、cgiファイルが500internalサーバエラーになる現象が発生しています。 ファイルは以前動作したサーバから引っ張ってきました。 原因を探っていたのですが、cgiファイルのソース記述を #!/usr/bin/perl -w と記述を変更すると正常に動作しました。 -w について 【1度しか出現しない識別子や、初期化されずに参照される変数など、危険、無駄と思われる処理の警告を出力します。実際にはもっとたくさんの種類のチェックをするようです。】 と言う事はわかりましたが、いままで、-wなしで動作していたので、-wなしで動くよう、perlの設定を変更したいとかんがえております。 なにぶんPERL初心者ですので、同様の事象で知見がある方、ご教授を宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • 標準出力をDOS窓を開かずにファイルに書き込む方法

    VC++(Console Appli)です。 あるコマンドの標準出力結果をファイルに吐き出す方法として、 単純には、 system("cmnd > C:\\temp.txt"); とやれば実現できますが、このとき、一瞬ですが、DOS窓の黒枠が表示されます。 このDOS窓を出さないで済む方法があれば教えてください。 標準出力を何らかの方法で受け取って、 ------------------------------------------------- CString str; CStdioFile file;   :  cmndの標準出力結果をstrへ内部的に受け取らせる。   : file.Open(_T("c:\\temp.txt"), CFile::modeWrite); file.WriteString(str); file.Close(); ------------------------------------------------- などで簡単に出来れば良いのですが・・よろしくお願いします。

専門家に質問してみよう