printf構文が反映されない理由は?

このQ&Aのポイント
  • CGIプログラムでprintf構文が反映されない理由について解説します。
  • CGIプログラムのなかでprintf構文が正しく機能しない理由について詳しく説明します。
  • printf構文が反映されない問題の原因と解決策について解説します。
回答を見る
  • ベストアンサー

printfの働き

以下のCGIプログラムで、なぜprintf構文が反映されないのでしょうか? #! c:/usr/local/bin/perl $\ = "\n"; %color =("apple"=>red,"banana"=>yellow,"sky"=>blue,"tree"=>green); print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><title>CGI練習</title></head> <body> END print "<hr>"; foreach(keys(%color)){ printf("%-10s %7s<br>",$_,$color{$_}); } print <<END; </body> </html> END

  • CGI
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

printfというより、HTMLの仕様の問題です。 連続する半角スペースはレンダリング時には一つにまとめられるので %-10s %7s などで整形する行為は無効です。 次のように<pre>で囲えば一応スペースでの整形も反映されます。 print "<hr><pre>"; foreach(keys(%color)){ printf("%-10s %7s<br>",$_,$color{$_}); } print <<END; print <<END; </pre></body> </html> END

関連するQ&A

  • 「 <!--#exec cgi="***.cgi" --> 」が表示されません

    「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。 こんな感じ ------------main.cgi------------ #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <略> </body> </html> EOM __END__ -------------------------------- それで、ほかのHTMLファイルに <!--#exec cgi="main.cgi" --> と入力してそのページを見てみると、 [an error occurred while processing this directive] 上の文章が表示されていました。 どうすれば「main.cgi」の内容を表示することができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 基礎の基礎

    CGIを勉強しようとネットや本で調べています。 基礎の基礎の「Hello」という文字の表示さえもできません…。 まず「Apache」と「Active Perl」をインストールしました。インストール先は「Dドライブ」です。(Cドライブが結構いっぱいだったので) 「メモ帳」に #!D:/Perl/bin/perl print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title></title></head> <body> hello perl! </body> </html> END と入力し、「hello.cgi」という名前で保存し、「htdoc」フォルダの中の「test」フォルダに保存しました。 そしてブラウザで「http://127.0.0.1/test/hello.cgi」を表示させると #!D:/Perl/bin/perl print \< hello perl! END と表示されるのです。 「hello perl!」と表示させたいのですが、なぜなのでしょうか?ご存知の方教えてください。 ちなみに、ヒアドキュメントを使わなくても、HTMLのタグ以外が見えるような状態になります。

    • ベストアンサー
    • CGI
  • 外部のスタイルシートが働かない

    HTML文書に外部からのスタイルシートを持って来て使いたいのですが、全く働きません。 スタイルシートは次のようなもので、"mystyle.css" としてHTMLと同じフォルダーに入れてあります。 <style> body{ background-color:gray; color:black; } .title{ font-size:14pt; color:blue; } a{ color:yellow; } .prompt{ color:pink; } </style> そしてHTML内では <link rel="stylesheet" href="mystyle.css">  としてリンクさせています。 <body> も <a>も class="title" としてクラス名を付けたものも、全く影響されていません。 何処がおかしいのか、詳しい方、ぜひ教えてください。お願いします。 ちなみに、このスタイル部分をHTMLの<head>内に貼り付けると期待通りになります。

    • ベストアンサー
    • HTML
  • レンタルサーバーでperlのcgiファイルを実行する手順を教えて下さい

    レンタルサーバーでperlのcgiファイルを実行する手順を教えて下さい。 レンタルサーバー会社からは、「cgi-bin」フォルダにcgiファイルを配置(アップロード)すれば ブラウザで見れると説明を受けました。 用意したcgiファイルは以下の内容です。 _____________________________ #! c:/perl64/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; #さいころを振る。 $n = int(rand 6) + 1; #HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0.1//EN\">\n"; print "<html>\n"; print "<head><title>Perlでさいころ</title></html>\n"; print "<body>"; print "<p>さいころの目は<big>$n</big>です。</p>\n"; #御言葉を出力 if($n == 4){ print "<p>ふ、不吉な・・・。4が出ました。</p>\n"; } print "<body></html>"; __________________________________________ 一行目が原因でしょうか。ローカルで作成した、cgiファイルをレンタルサーバーに配置(アップロード)し ブラウザから見たいと考えております。 ご存知の方、教えて頂けないでしょうか。 宜しくお願いします。

  • 1つのhtmlページにたくさんのCGIを表示したい

    1つのhtmlページにたくさんのCGIを表示したいのですができますか? "Content-type: text1/html\n\n" /* ** CGI版のhello.c(HTML仕様) */ #include <stdio.h> main(){ printf("Content-type:1/html\n\n"); /* ここから HTML でお馴染みのタグ */ <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> /* あいうえお */ "Hello C World!<BR>\n" "</BODY>" "</HTML>" } みたいなCGIを入れたいのですが。

    • 締切済み
    • CGI
  • cgiについて教えて下さい。

    cgiについて教えて下さい。 ■cgiが実行できません。 ・os:windows7(64bit) ・apache2.2.16(windows32bit)※ローカル ・ActivePerl(インストール済み) ※httpd.confファイル(現状) ・Options Index FollowSymLinks Includes ExceCGI ・AllowOverride All ・AddHandler cgi-script.cgi ・AddType text/html.shtml ・AddOutputFilter INCLUDES .shtml ■http://localhost/abc/test.cgi を実行すると表示できず。 ・http://localhost/ にはアクセスできます。 ※windowsネットワーク診断/トラブルシューティングの結果 →リモートデバイスまたはリソースが接続を受け付けません。 ■上記、test.cgiのソース #! c:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>Hello HTML</title></head>\n"; print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n"; print "</html>"; 以上、宜しくお願い致します。

    • 締切済み
    • CGI
  • ファイルの読み込み操作のコーディングについて

    perlのファイル読み込み操作についての質問です #!/usr/local/bin/perl #ファイルの読み込み open(FILE,"<diary.txt"); $data = <FILE>; close(FILE); #サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>ファイルの読み込み</title> </head> <body> <h5> <p>$data</p> </h5> </body> </html> END 次のように、perlのコードを書いて無料の CGIの使えるレンタルサーバーに 設置したところ、エラーが出てしまいます dairy.txtはこのファイルと同じディレクトリで パスも間違えてないです、いろいろ自分で調べてみたんですが どこが間違えているかわかりません よろしかったらどなたかperlに詳しい方がいらっしゃったら 間違えている箇所を教えていただけないでしょうか?

  • 文字化け

    以下のように作成して、実際に表示すると文字化けします。 CGIは素人です・・。宜しくお願いします。 # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>DOUBLE STEAL DESIGN MARKET</TITLE> </HEAD> <BODY background="bg2.gif"> <CENTER> <B><FONT size="4"> <FONT color="red"> <BR> ありがとうございました。 <P> 至急お送りいたします。</FONT> <P> <FONT color="blue">☆</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML 実際に表示される文字は・・・  ^0!#(B ;j5^Aw?STDOUT_TOP!#(B !y(B です。お願いします・・・。

    • ベストアンサー
    • CGI
  • タイトルに太枠を付けるために

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <style type="text/css"> <!-- .title { background-color:lightyellow; font-size:24px; font-weight:bold; margin-top:20px; margin-left:50px; margin-bottom:20px; margin-right:50px; border-color:blue; border-style:solid; border-width:5px; } --> </style> </HEAD> <BODY> <span class=title> 大石倉之助 </span> </BODY> </HTML> としたのですが 「大石倉之助」 に左右の太枠はつくのですが上下の太枠がつきません どうしたら上下にも太枠がつくのでしょうか?

    • ベストアンサー
    • HTML
  • html言語の配置について

    <HTML> <HEAD> <TITLE>ランファスター001</TITLE> </HEAD> <BODY BGCOLOR="yellow"> <CENTER><H1> <FONT color="red">ランファスター001</FONT> 基本的な質問ですが、HTMLの1つ1つの<>はどのような法則で配置していけばいいのでしょうか。例えば <BODY BGCOLOR="yellow">の下にある<CENTER>はなぜあの位置なのか法則性を知りたいです。 どのように決めたらいいのでしょうか。。

    • ベストアンサー
    • HTML

専門家に質問してみよう