perlで環境変数を表示できない

このQ&Aのポイント
  • perlの初心者です。CGIを実行して環境変数を表示するプログラムを作成しましたが、うまく表示されません。
  • プログラムの中で「環境変数」という文字も表示されない問題が発生しています。
  • 初歩的なエラーがあると思いますが、解決方法がわかりません。どなたか教えてください。
回答を見る
  • ベストアンサー

perl で環境変数を表示できない

perlの初心者です。下記のCGIを実行しましたが、全く表示しません。 最初の「環境変数」と言う文字も表示しません。 どこか初歩的なエラーがあると思いますが、わかりませんので質問させていただきます。 --- #!/usr/local/bin/perl print "Content-type: text/html", "\n\n"; print "<HTML><BODY>", "\n"; print "<H1>環境変数</H1><HR>", "\n"; foreach my $key( keys %ENV ){ print "$key: $ENV{$key}<BR>", "\n"; } print "<HR>", "\n"; print "</BODY></HTML>", "\n";

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

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

  • ベストアンサー
  • gorusura
  • ベストアンサー率59% (25/42)
回答No.3

如何やら解決している様ですので、文字化け等が起きないようにする方法や、見やすくするための方法を書いておきます。 #!/usr/local/bin/perl print "Cache-Control: no-cache\n"; print "Pragma: no-cache\n"; print "Content-Type: text/html;charset=Shift_JIS\n\n"; print <<"EOF"; <html> <head> <title>環境変数</title> <meta http-equiv="Content-type" content="text/html;charset=Shift_JIS;"> </head> <body> <h1>環境変数</h1> <hr> EOF foreach $key(keys %ENV){ print "$key: $ENV{$key}<br>\n"; } print <<"EOF"; <hr> </body> </html> EOF exit; 参考になれば、幸いです。

hi-kochan
質問者

お礼

ありがとうございます。 参考にさせていただきます。 特に文字化けはこれから、対処しようと思っていたところです。 ローカルがパソコン、サーバがUNIXのせいか、結構困っています。 また機会がありましたら、よろしくお願いします。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

・「#!/usr/local/bin/perl」このパスが正しいか確認してください。 ・「print "Content-type: text/html", "\n\n";」ここを 「print "Content-type: text/html; charset=(文字コード)", "\n\n";」にしてみてください。

hi-kochan
質問者

お礼

今回のことで、目的まで少し前進しました。 ありがとうございます。・

hi-kochan
質問者

補足

パスは大丈夫でした。回答のように直して実行しました。表示は出力しました。 実はユーザごとにファイル名を変えたくて、REMOTE_IDENTを見たかったのですが、それは出力しませんでした。しかし当初の目的は達成できました。 ありがとうごじます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

スクリプトには特に問題無いと思います。(私なら、文字列と改行文字とを分けてカンマで区切らないで、一つの文字列にしてしまいますが) 出力されるHTMLはいろいろと問題がありますが、ブラウザがなんとかしてくれるレベルです。 疑わしいのは実行方法です。 どんな方法で実行していますか? サーバー上で実行したのであれば、間違っていてもなんらかのエラーメッセージが表示されるはずです。 何も表示されない、ということからすると パソコン上でファイル作成→それをそのままブラウザへドラッグ&ドロップ とかやってませんか?

hi-kochan
質問者

補足

早速の回答ありがとうございます。パソコン上にもperlの実行環境があるのですが、そこで実行すると表示します。そのファイルをperlのパスを直して、サーバに アップロードして、CGIを実行させるHTMLファイルを作成して、テストしています。 何のエラー表示もなく、ただ表示しないという現象です。

関連するQ&A

  • Perl 順序が!?

    #! usr/bin/perl %toshi=("suzuki"=>24,"sato"=>26,"tanaka"=>32); foreach $key(keys(%toshi)){ print "($key,$toshi{$key})\n"; } exit; とありますが、どうして結果表示が (tanaka,32) (suzuki,24) (sato,26) となるのでしょうか? (suzuki,24) (sato,26) (tanaka,32) なぜこれにはならないのですか?

    • ベストアンサー
    • Perl
  • エラー表示

    CGIがエラーを出すと、サーバーが500番エラーを表示しますよね。 そのページを.htaccessのErrorDocumentを使って、自分で定義したものにできたのですが、そのエラーページをCGIにして、どこかにエラーになったページが吐いたエラー出力が入ってないかと思ったのですが、入ってないのでしょうか? -------- #!/usr/bin/perl # hoge.cgi # エラーするCGI die "hoge!"; -------- #!/usr/bin/perl # error.cgi # 500エラーページなCGI print "$_: $ENV{$_}<br>\n" foreach(sort keys %ENV); # ここでもない print foreach(<STDIN>); # ここでもない print foreach(<STDERR>); # ここでもない print ・・・どこかに "hoge!" が入ってないでしょうか? -------- # .htaccess ErrorDocument 500 /error.cgi Apache/1.3.24 Server perl 5.005_03 built for sun4-solaris

    • 締切済み
    • CGI
  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl
  • perl localhostでgifを表示するには

    超初心者からプログラムを初めて1週間、 プログラム言語にはperlを使用しています。 mac os x です。 perlの教科書読みながら、アクセスカウンタを作ろうとした所、 何故かgif画像が表示されません。 ネットの素材置き場からとってきましたが、パソコン自身、gif自体は認識してくれてます。 ただ、それをperlに組み込んで使おうとすると、表示されません。 ブラウザはfirefoxとsafariで試しましたが、両方認識してくれませんでした。 ちなみにソースは ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>アクセスカウンタ2</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>test</H1><HR>\n"; if ( open ( FH , "count.txt")){ $cnt = <FH>; close( FH ); $cnt++; print"<CENTER>\n"; foreach $fld (split (// , $cnt)){ print "<IMG SRC=\"${fld}.gif\">"; } print"</CENTER>\n"; if ( open(FH, ">count.txt" )){ print FH $cnt; close(FH); } else { print "ファイルの書き込みオープンに失敗しました。\n"; } } else { print "ファイルの書き込みオープンに失敗しました。\n"; } print "</BODY>\n"; print "</HTML>\n"; __END__ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー です。 テキストファイルを確認しているので、 perl 自体の活動と、アクセスのログ?自体は正常に動いているみたいです。 お願いします。 助けてください!

    • ベストアンサー
    • Perl
  • perlでHTTP Request Headersの情報を取得、表示す

    perlでHTTP Request Headersの情報を取得、表示するページを作成したい 当方初心者です。 apache上のCGI(perl)で、ブラウザから受け取った HTTP Request Headersの情報を取得、出力するページを作成したいのです。 調べると下記のようなサーバ環境変数の取得、表示方法は多数ヒットするのですが =================================================== #!/usr/bin/perl -- print << "DOC1"; Content-type:text/html\n\n <HTML><BODY> DOC1 print $ENV{'HTTP_USER_AGENT'}<br>\n"; print $ENV{'REMOTE_ADDR'}"; print << "DOC2"; </BODY></HTML> DOC2 =================================================== 今回は、環境変数からではなく、HTTP Request Headersから 直接ヘッダに格納された情報を取得したいのです 取得・表示したい情報は標準HTTPヘッダ情報に加え、 途中で経由するプロキシが追加するヘッダ情報です。 完成イメージとしては PHPの<? phpinfo() ?>で出力できる 添付画像にあるような形なのですが どのようにすればできるのでしょうか サンプルの形で教えて頂けると助かります 参考になるページでも結構です よろしくお願いします

  • FedoraCore3の/var/www/html/に

    x.cgi: #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>world</TITLE></HEAD>\n"; print "<BODY>\n"; print "<H2>Hello</H2>\n"; print "<HR>\n"; print "</BODY>\n"; print "</HTML>\n"; を配置して他のPCからこのファイルを読みだしたのですがこのコードがそのまま表示されてしまい Perlが実行されません 何が原因でしょうか?

    • ベストアンサー
    • Perl
  • CGIが文字化けしてしまう。(Perl)

    環境 WinXP    Apache ActivePerl 開くソフトは「Tera pad」      でやっています。ソースは #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ああああ。</BODY>\n"; print "</HTML>\n"; __END__ です。「ああああ」部分が「‚ ‚ ‚ ‚ B」 と表示されます。 どなたか解決方法ご存知の方いらっしゃいましたら ご回答お願いします。

    • ベストアンサー
    • CGI
  • Perlを使った単語出現カウント

    コマンドライン引数で 入力ファイルからデータ受け取って結果を出力ファイルに書き込みたいのですが、プログラムは #!/usr/bin/perl while ( <> ) { @words = split(" "); $wc{@words[0]} += 1; } foreach $key (keys %wc) { print "$wc{$key} $key\n"; } で今のコードでは、コンソールに出力されるだけとなってしまいます。 ファイル入出力を行うにはどうすればいいですか?

    • ベストアンサー
    • Perl
  • Perl 正規表現について

    Perlに関していつもお世話になっております。 今回も正規表現に関する質問をしたいと思います。 「あ、あい、あいう、あいうえ、あいうえお」というハッシュが存在するときに、「{あ}は○○回出ました。」「{あい}は○○回出ました。」とそれぞれ表示させるコードを組もうと思います。 前回までで皆様に教えていただいたことを元に組んでみました。 #!/usr/bin/perl use warnings; use strict; use utf8; use Encode; my %word_of = ( 'あい' => 0, 'あいう' => 0, 'あいうえ' => 0, 'あいうえお' => 0, 'かき' => 0, 'かきく' => 0, 'かきくけ' => 0, 'かきくけこ' => 0, ); foreach my $search_key ( keys %word_of ) { foreach my $word ( keys %word_of ) { if ( $word =~ /$search_key/ ) { $word_of{$search_key}++; } } } foreach my $key ( sort ( keys %word_of ) ) { # utf8, shiftjis eucjp ... print encode( 'utf8', "「$key」 は $word_of{$key} 回出ました" ), "\n"; } これを出来ればeucjpで組みたいのですが、可能でしょうか? 私の思いあたる点、utf8表記の部分をeucjpに直しただけではエラーが出てしまいます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • テキストファイル内の変数を展開して出力したい

    テキストファイル内に変数を書いておいて、出力時に その変数を展開させる方法を教えてください。 具体的には、[test.txt]を[出力]のようにしたいのです。 ためしに[test.cgi]を作ったのですが[test.txt]の内容がそのまま出てきてしまいました。 [test2.cgi]ができるなら、[test.cgi]でもできると思っていたのですが… [test.cgi] #!/usr/local/bin/perl $moji="OK"; print "Content-type: text/html\n\n"; open(IN, 'test.txt'); while (<IN>) { print "$_"; } close(IN); exit; [test2.cgi] #!/usr/local/bin/perl $moji="OK"; $naka="<HTML><BODY>$moji</BODY></HTML>"; print "Content-type: text/html\n\n"; print "$naka"; } close(IN); exit; [test.txt] <HTML><BODY>$moji</BODY></HTML> [出力] <HTML><BODY>OK</BODY></HTML>

    • ベストアンサー
    • Perl

専門家に質問してみよう