list.txtは、番号、名前、性別がコンマで区切られたCSVファイルである。 list.txtの内容を読み取って、各行の項目の値をタブで区切って、webページで表示するCGIスクリプトとして、以下のように作成してみた。
#! /usr/bin/perl
$top_page = "index.html";
$filename = "list.txt";
@data =();
# 読み取りモードでファイルを開く
open(IN, "<$filename") || &error("Cannot read $filename: $!");
while(<IN>){
chomp;
( $number, $name, $gender) = split(/,/, $_);
# 無名ハッシュを配列にする
push @data,
{
'number'=>$number,
'name'=>$name,
'gender' =>$gender
};
}
# ファイルを閉じる
close(IN);
print "Content-Type: text/html\n\n";
print "<html><head><title>CGI sample</title></head>\n";
print "<body>\n";
print "<h2>リストの表\示</h2>\n";
foreach (@data){
print "$_->{number}\t$_->{name}\t$_->{gender}<br>\n";
}
print "</body></html>\n";
exit;
################### subroutines ##################
# エラー表示
sub error
{
print "Content-Type: text/html\n\n";
print <<"---EOF---";
<html><head><title>Information</title></head>
<body>
<span sylte="color: red;"> $_[0]</span>
<form method="GET" action="$top_page">
<input type=SUBMIT value="最初のページに戻る">
</form>
</body></html>
---EOF---
exit;
}
showlist.cgiを改造して、男性のデータだけの番号、名前を表示するようにした。
#! /usr/bin/perl
$top_page = "index.html";
$filename = "list.txt";
@data =();
# 読み取りモードでファイルを開く
open(IN, "<$filename") || &error("Cannot read $filename: $!");
while(<IN>){
chomp;
( $number, $name, $gender) = split(/,/, $_);
# 無名ハッシュを配列にする
push @data,
{
'number'=>$number,
'name'=>$name,
'gender' =>$gender
};
}
# ファイルを閉じる
close(IN);
print "Content-Type: text/html\n\n";
print "<html><head><title>CGI sample</title></head>\n";
print "<body>\n";
print "<h2>リストの表示</h2>\n";
foreach (@data){
if($_->{gender} eq "男"){
print "$_->{number}\t$_->{name}<br>\n";
}
}
print "</body></html>\n";
exit;
################### subroutines ##################
# エラー表示
sub error
{
print "Content-Type: text/html\n\n";
print <<"---EOF---";
<html><head><title>Information</title></head>
<body>
<span sylte="color: red;"> $_[0]</span>
<form method="GET" action="$top_page">
<input type=SUBMIT value="最初のページに戻る">
</form>
</body></html>
---EOF---
exit;
}
showmen.cgiを改造して、男性のデータだけの番号、名前を、表形式(table要素)で表示するように工夫せよ。