
#!/usr/bin/perl
$boardfile = "/tmp/board";
print "Content-type: text/html\n\n";
# POSTが実行(Submit)された場合にメッセージをファイルに記入します。
# CGIスクリプトが呼び出されただけの場合は、電子掲示板を表示するだけ
# です。
if ($ENV{'REQUEST_METHOD'} eq "POST") {
%form = &read_input;
$your_name = $form{'from'};
$your_message = $form{'message'};
open(BD, ">>$boardfile") || die "not board file";
print(BD "<hr>\n");
print(BD "<i>$your_name</i><br>\n");
print(BD "$your_message\n");
print(BD "\n");
close(BD);
&create_page;
}
else {
&create_page;
}
# ページ作成のサブルーチン
sub create_page
{
print "<head>\n";
print "<title>Electoric Board for WWW</title>\n";
print "</head>\n";
print "<body>\n";
print "<h2>Electoric Board for WWW</h2>\n";
print "\n";
print "<hr>\n";
print "\n";
print "<form method=\"POST\" action=\"/cgi-bin/chat.cgi\">\n";
print "Your name: <input name=\"from\"><p>\n";
print "Your message:<p>\n";
print "<textarea rows=5 cols=60 name=\"message\"></textarea><p>\n";
print "\n";
print "<input type=\"submit\" value=\"Post a mesasge\"><p>\n";
print "</form>\n";
print "\n";
print "\n";
# メッセージファイルの読み込みと表示を行います。
open(BOARD, "$boardfile") || die "not board file";
while(<BOARD>) {
print ;
}
close(BOARD);
print "\n";
print "</body>\n";
}
sub read_input
{
local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else
{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%(..)/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
%FORM;
}
これよりも非常に高機能な HyperNews と呼ばれるWWWを利用した電子掲示板ツールもあります。