新・元地方の中規模印刷会社で苦悩するWebデザイナー改めWebディレクターの日記

自由な20代、窮屈な30代を経て、遂に40代になっちまったWebディレクター&パソコン講師の覚書と思う言(こと)。略称【ちほちゅう】

*

cgi(perl)にhtmlを読み込ませる方法

   

  • このエントリーをはてなブックマークに追加

1年以上前の記事です。内容が古い可能性があります。

たとえば与えられた変数によって違うページを表示させることを考える。
具体的には、ユーザーページやちょっとした占い等にもつかえそう。
そうでなくてもHTMLをCGIスクリプトの中に読み込ませることは多いはず。
そもそもプログラムをやる人間が知らなかったのも問題だが、そのあたりを調べてみた。

スポンサーリンク
 

さっそくスクリプトから紹介。

1. $id .= ".html";
2. open(IN,$id);
3. @file = <IN>;
4. close(IN);
5. print "Content-type: text/html\n\n";
6. print "@file";
7. exit;


1. idに「.html」を付けてHTMLファイルと同名にする。
2. ID.html($id=”ID”とする)を開きファイルハンドルINに結びつける。
3. 配列fileにファイルハンドルINを代入
4. ファイルハンドルをクローズする。
5. HTML表示のための下準備
6. HTMLを表示する。
7. プログラムを抜ける。

参考書読んでいたらもうちょい省略できるみたい。

1. $id .= ".html";
2. open(IN,$id);
3. print "Content-type: text/html\n\n";
4. while (<IN>) { print; }
5. close(IN);
6. exit;


ポイントは4行目。
while文とファイルハンドルを使って配列を用意せずにファイルハンドルを直接プリントアウトできるようです。

そこで疑問に思うこと。ファイルハンドルって何?
print <IN>;」や「print "IN";」「print IN;」じゃ何故ダメなの?
疑問を疑問のままにしておかないのが当ブログのモットーです。
動作確認も含め調べてみると、「print <IN>;」でしっかり動作しています。
(ちなみに「print "IN";」では「IN」と表示されるだけ。「print IN;」では何も表示されません)
いろいろ調べた結果、別に「print <IN>;」でもいいみたいです。

一般的にperlで外部データを読み込む場合、それはデータベースのことがおおく、
したがって配列にファイルハンドルを代入することが多いというのが最初のスクリプトの理由。

while文に関しては標準入力(STDIN)を表示させる場合のスクリプトの名残と、
ファイルハンドルに対してそのまま出力せずに、
様々な命令を付加できるという拡張性を考えて使われていることが多いようです。

つまり、

1. $id .= ".html";
2. open(IN,$id);
3. print "Content-type: text/html\n\n";
4. print <IN>;
5. close(IN);
6. exit;


ここまで簡単にできました。

参考サイト
Perlプログラムをコンパクトに記述する方法 – builder by ZDNet Japan

 - プログラミング, 覚え書き

アドセンス広告メイン

Message

メールアドレスが公開されることはありません。

  関連記事

ツイッターの名前を「アドセンスクリックお願いします」にするとアフィブログに絶対転載されない

1年以上前の記事です。内容が古い可能性があります。これは目から鱗。かつ、注意しな …

電源ボタンが壊れたiPhoneを電源ボタンを使わず再起動させる方法

1年以上前の記事です。内容が古い可能性があります。娘の「iPhone5」の電源ボ …

独自ドメインのWORDPRESS(ワードプレス)ブログを半日で作る方法(前編)

1年以上前の記事です。内容が古い可能性があります。ブログ移転後最初の記事はまさに …

Photoshop CC(2014)で「◯◯ツールを使用できません。プログラムエラーです。」が出た時の対処法

1年以上前の記事です。内容が古い可能性があります。知り合いのデザイナーさんのパソ …

ツイッター(Twitter)をSMS替わりとして使う方法

1年以上前の記事です。内容が古い可能性があります。SMS(ショートメッセージサー …

ツイッター(Twitter)の仕様変更で「EasyBotter」が動かなくなったのでバグフィックスした

1年以上前の記事です。内容が古い可能性があります。数日前からつぶくまくんのつぶや …

no image
モノをなるべく探さないためのヒント

1年以上前の記事です。内容が古い可能性があります。□モノを探す時間が、いちばんの …

自然界は「弱肉強食」ではなく、「全肉全食」、「適者生存」。社会(世の中)も同様

1年以上前の記事です。内容が古い可能性があります。弱者は抹殺されません。これは自 …

プロキシはもう古い。「TOR(トーア)」とは何のこと?

1年以上前の記事です。内容が古い可能性があります。さてさて、2ちゃんねるでの個人 …

WikipediaやGoogleも反対する「SOPA」とは何のこと?

1年以上前の記事です。内容が古い可能性があります。最近良く耳にする茹でたらおいし …

血液型オヤジ