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要素)で表示するように工夫せよ。