[リストへもどる]
一括表示
タイトルCGIのエラー箇所がわかりません。
記事No8365
投稿日: 2012/03/06(Tue) 18:12
投稿者km
再びすみません、kmです。

現在CGIのプログラムを作成していまして、作ったプログラムをコマンドプロンプトのperl -cにてコンパイルを行っているのですが、エラーが多数出て、中々進まなくなってしまいました。

Can't modify constant item in scalar assignment at user_info.cgi line 63, near
$name;"
BEGIN not safe after errors--compilation aborted at user_info.cgi line 64.

というエラーです。
その付近のプログラムは
62 print "【名前】\n\n";
63 #quantity1 = $name{$date};
64 quantity1 = $date[$name];
65 <INPUT TYPE="text" NAME="quantity1" VALUE="1" SIZE="3" MAXLENGTH="20">
66 print "【都道府県】\n\n";
67 #quantity2 = $todouhuken{$date};
68 quantity2 = $date{$todouhuken};
69 <INPUT TYPE="text" NAME="quantity2" VALUE="1" SIZE="3" MAXLENGTH="10">

という状態です。
おそらく変数の書き方?が間違っているような気がしますが、色々試したのですが、駄目でした。

タイトル何度も言いますが、もう少し基本からやらないと
記事No8366
投稿日: 2012/03/06(Tue) 19:18
投稿者おやじ
> 再びすみません、kmです。
>
> 現在CGIのプログラムを作成していまして、作ったプログラムをコマンドプロンプトのperl -cにてコンパイルを行っているのですが、エラーが多数出て、中々進まなくなってしまいました。
>
> Can't modify constant item in scalar assignment at user_info.cgi line 63, near
> $name;"
> BEGIN not safe after errors--compilation aborted at user_info.cgi line 64.
>
> というエラーです。
> その付近のプログラムは
> 62 print "【名前】\n\n";
> 63 #quantity1 = $name{$date};
> 64 quantity1 = $date[$name];
> 65 <INPUT TYPE="text" NAME="quantity1" VALUE="1" SIZE="3" MAXLENGTH="20">
> 66 print "【都道府県】\n\n";
> 67 #quantity2 = $todouhuken{$date};
> 68 quantity2 = $date{$todouhuken};
> 69 <INPUT TYPE="text" NAME="quantity2" VALUE="1" SIZE="3" MAXLENGTH="10">
>
> という状態です。
> おそらく変数の書き方?が間違っているような気がしますが、色々試したのですが、駄目でした。

試す以前に調べればすぐわかる話です。あるべき姿がわからずに試すのは無駄です。仮にうまくいっても理由がわからないから、また同じような問題にぶつかります。
まずは、いろいろ手を出す前にperlの基本を勉強しないと・・・。いつまでもこの状態から抜けられないですよ。
「perl スカラー変数」をGoogle先生に聞けば答えがでています。

タイトルRe: 何度も言いますが、もう少し基本からやらないと
記事No8367
投稿日: 2012/03/07(Wed) 12:18
投稿者km
すみません、kmです。
午前中調べてみたのですが、よくわかりませんでした。
時間も余り残されていない為、教えて頂きたいです。
よろしくお願いします。

タイトルCGI現状報告
記事No8370
投稿日: 2012/03/09(Fri) 18:16
投稿者km
すみません、kmです。相変わらずCGIが動きません。

ファーストサーバの方から連絡がありまして、記述の誤りがあることしかわかりませんと言われてしまいました。数日間考え続けているのですが、わからないです。どこがエラーなのでしょうか?

構文エラーは出ないのですが・・・・

色々試して、汚いソースで申し訳ないのですが貼らせていただきます。

#!/usr/bin/perl --
# CSVデータの設定
#$csvfile = ***.csv;
#↑の書き方はNG
sub data_read{
# 検索用データ(とりあえず固定で)
$SeekData = "2011/5/10 14:21:00";
my(%date,%name,%todouhuken,%adress,%tel,%email,%gender,%birth,%question,%ans,%pay);
#open(IN,"$csvfile");
open(IN,"****.csv");
# カウンタをゼロクリア
$count = 0;
# 全データを読み出す?検索して表示するプログラムにする予定
for($count=0; $count<=1000; $count++) {
#chomp;
# split関数でデータを分割する
my($date,$name,$todouhuken,$adress,$tel,$email,$gender,$birth,$question,$ans,$pay) = split(/,/);
# データ一致するか?(検索用データ&読み込んだデータ)
if($SeekData eq $date)
{
#$name{$date} = $name;
#$todouhuken{$date} = $todouhuken;
#$sity{$date} = $sity;
#$adress{$date} = $adress;
#$tel{$date} = $tel;
#$email{$date} = $email;
#$gender{$date} = $gender;
#$birth{$date} = $birth;
#$question{$date} = $question;
#$ans{$date} = $ans;
#$pay{$date} = $pay;
# 一致したデータを表示する!
# my $body <<EOM; EOMやめる
print "Content-type: text/html\n\n";
#print "<html><body>\n";
print "<html>\n";
print "<body>\n";
print "****\n\n";
#<HR>
print "【****】\n\n";
print "****\n\n";
print "【お名前】\n\n";
$name = "お名前";
<INPUT TYPE="text" NAME="quantity1" VALUE="$name" SIZE="3" MAXLENGTH="20">
#print "【郵便番号】";
#<INPUT TYPE="text" NAME="quantity2" VALUE="$adress" SIZE="3" MAXLENGTH="10">
#print "【住所】\n\n";
#<INPUT TYPE="text" NAME="quantity3" VALUE="$adress" SIZE="3" MAXLENGTH="30">
#print "【TEL】\n\n";
#<INPUT TYPE="text" NAME="quantity4" VALUE="$tel" SIZE="3" MAXLENGTH="10">
#print "【E-Mail】\n\n";
#<INPUT TYPE="text" NAME="quantity5" VALUE="$email" SIZE="3" MAXLENGTH="20">
#print "【性別】\n\n";
#<INPUT TYPE="text" NAME="quantity6" VALUE="$gender" SIZE="3" MAXLENGTH="5">
#print "【生年月日】\n\n";
#<INPUT TYPE="text" NAME="quantity7" VALUE="$birth" SIZE="3" MAXLENGTH="10">
#print "【○○】\n\n";
#<INPUT TYPE="text" NAME="quantity8" VALUE="$question" SIZE="3" MAXLENGTH="20">
#print "【XXXXXX】\n\n";
#<INPUT TYPE="text" NAME="quantity9" VALUE="$ans" SIZE="3" MAXLENGTH="20">
#print "【パスワード】\n\n";
#<INPUT TYPE="password" NAME="quantity10" VALUE=" " SIZE="3" MAXLENGTH="12">
#<INPUT TYPE="password" NAME="quantity11" VALUE=" " SIZE="3" MAXLENGTH="12">
#print "(確認)";
#print "</html></body>\n";
#print "</body>\n";
#print "</html>\n";
# EOM
}
}
close(IN);
}

タイトルRe: CGI現状報告
記事No8371
投稿日: 2012/03/10(Sat) 03:12
投稿者瀬戸っぷ   <setoppu@gmail.com>
最後にperl触ったのはかなり前なのですが…

> 構文エラーは出ないのですが・・・・

サブルーチン、使われていないのですからエラーにはならない…んでしょうね。

基本からちゃんとやった方がいい。というおやじさんのアドバイスは的確かと。

まぁ、それでもツッコミしてみますか…

>open(IN,"****.csv");
ファイルオープンしたあと読み込んでいません。

>for($count=0; $count<=1000; $count++) {
ファイルが1000行に満たない場合はどうしましょうか?
# まぁ、今は読んでいないので問題ありません。

>my($date,$name,$todouhuken,$adress,$tel,$email,$gender,$birth,$question,$ans,$pay) = split(/,/);
split()の引数、ちゃんと確認しましょう。
区切る文字列はどこから取得しましょうか?
# ファイルから読み込んだデータを…って期待をしても、
# プログラムはコード書いた人の思惑を読み取ってはくれません。
# 非常に残念ですがまだその域まで技術は到達していないのです。

>#$name{$date} = $name;
> :
>#$pay{$date} = $pay;
コメントアウトされていますが…
おやじさんにgoogleで調べてみるべし。というアドバイスはブラックホールへぽいしてます?
連想配列のつもりでしょうか??
左辺と右辺で変数名工夫しないと混乱しませんか?
# 読んでいる方が混乱しました。
# すみませんが、そこで思考停止してます。
# 自分が関わるモノならもっと追求しますが…

>print "Content-type: text/html\n\n";
HTTP レスポンスヘッダ…でしょうか?
データ1行ごとにレスポンスヘッダが必要なのか、HTTPの仕様を確認した方がいいでしょう。

><INPUT TYPE="text" NAME="quantity1" VALUE="$name" SIZE="3" MAXLENGTH="20">
perlにこんな構文などはないでしょう。
printなどで出力するネタではありませんか?

タイトルツッコミありがとうございます。
記事No8372
投稿日: 2012/03/10(Sat) 10:07
投稿者km
ツッコミありがとうございます。
とにかく時間が無いようなので、今日も20時ぐらいまで頑張ります^^;

タイトル基本ができていないので、自分でやるなら相当時間が必要でしょうね
記事No8375
投稿日: 2012/03/10(Sat) 10:40
投稿者おやじ
瀬戸っぷさんも書かれていますが、これでは仮に皆さんの手を借りて何とかしても自分で維持・管理できないですね。
基本的なことが、理解できていないと思います。
変数を見ると個人情報を扱うもののようですし、クロスサイトスクリプティング等を考慮してきちんと設計できるとは思えませんので危険ですね。
どうしてもやらなければならないなら専門家に頼むしかないのでは?

瀬戸っぷさんが殆どコメントしてくれているので、敢えて言うなら、

サブルーチンだけなので、このCGIにアクセスしても実際は何も実行せず、500 エラーになるだけ。

> #!/usr/bin/perl --

「--」は改行コードが管理できていないから必要なストッパなので、こんなものを書かなくても問題が出ないように管理しましょう。

> #$csvfile = ***.csv;
> #↑の書き方はNG

perlの基本。エスケープ文字対策がしていないから。文字列の代入方法も「'」もしくは「"」でくくらなければ駄目。「'」と「"」の使いわけに注意。

> print "Content-type: text/html\n\n";
> #print "<html><body>\n";
> print "<html>\n";

<head>行は?

> print "<body>\n";
> print "****\n\n";
> #<HR>
> print "【****】\n\n";
> print "****\n\n";
> print "【お名前】\n\n";

このあたりの最後は何故「\n\n」? 「
\n」の間違い?
perlの基本以外にHTMLの基本ができていないですね。

タイトルRe: 基本ができていないので、自分でやるなら相当時間が必要でしょうね
記事No8376
投稿日: 2012/03/10(Sat) 13:06
投稿者km
> 瀬戸っぷさんも書かれていますが、これでは仮に皆さんの手を借りて何とかしても自分で維持・管理できないですね。
> 基本的なことが、理解できていないと思います。
> 変数を見ると個人情報を扱うもののようですし、クロスサイトスクリプティング等を考慮してきちんと設計できるとは思えませんので危険ですね。
> どうしてもやらなければならないなら専門家に頼むしかないのでは?
>
> 瀬戸っぷさんが殆どコメントしてくれているので、敢えて言うなら、
>
> サブルーチンだけなので、このCGIにアクセスしても実際は何も実行せず、500 エラーになるだけ。
>
> > #!/usr/bin/perl --
>
> 「--」は改行コードが管理できていないから必要なストッパなので、こんなものを書かなくても問題が出ないように管理しましょう。
>
> > #$csvfile = ***.csv;
> > #↑の書き方はNG
>
> perlの基本。エスケープ文字対策がしていないから。文字列の代入方法も「'」もしくは「"」でくくらなければ駄目。「'」と「"」の使いわけに注意。
>
> > print "Content-type: text/html\n\n";
> > #print "<html><body>\n";
> > print "<html>\n";
>
> <head>行は?
>
> > print "<body>\n";
> > print "****\n\n";
> > #<HR>
> > print "【****】\n\n";
> > print "****\n\n";
> > print "【お名前】\n\n";
>
> このあたりの最後は何故「\n\n」? 「
> \n」の間違い?
> perlの基本以外にHTMLの基本ができていないですね。

ご指摘ありがとうございます。
セキュリティの部分は私も初期から危惧していまして、開発の初めから、上に相談し、完成したら詳しい方にチェックしてもらうことになっております。(ただ、プログラムはわからない方とお聞きしているので不安ではあります・・・)

元々内部で動くC言語しか扱ったことが無かった為、HTMLもperlもCGIも全て初めてでありますので、危険ではありますが、短納期であっても、やらなければならないため、やるしかないです・・・

タイトルRe^2: 基本ができていないので、自分でやるなら相当時間が必要でしょうね
記事No8377
投稿日: 2012/03/10(Sat) 15:08
投稿者瀬戸っぷ   <setoppu@gmail.com>
> 元々内部で動くC言語しか扱ったことが無かった為、HTMLもperlもCGIも全て初めてでありますので、危険ではありますが、短納期であっても、やらなければならないため、やるしかないです・・・

環境にもよりますが……。
でしたらC言語でCGI作る方が簡単なのでは?
修正はperlほど手軽ではありませんが。

今回やりたいことをC言語でなら書ける…んですよね?
# 慣れたプログラミング言語でロジックも組めないのであれば、他の人に担当替わってもらった方がいいです。

HTMLについての勉強も必要でしょうね。
printで改行したところでWebブラウザ上では改行されませんし。

タイトルCGI.pmを使ってみようと思います。
記事No8378
投稿日: 2012/03/10(Sat) 15:44
投稿者km
すみません、kmです。本の途中にCGI.pmというのが出てきたので、使ってみようと思います。

さっきまで、printでhtmlを書けばできると思っていました・・・・

タイトル何を使えばいいかわからなくなってきました・・
記事No8379
投稿日: 2012/03/10(Sat) 16:52
投稿者km
何度もごめんなさい。
更に読み進めると、HTML::Templateというものも出てきました。
いったいどれを使ったらよいか、混乱してきました。

タイトルあちこち手を出さなくても・・・
記事No8380
投稿日: 2012/03/10(Sat) 16:57
投稿者おやじ
> すみません、kmです。本の途中にCGI.pmというのが出てきたので、使ってみようと思います。
> 
> さっきまで、printでhtmlを書けばできると思っていました・・・・

printで何も問題なく出来ます。
アマチュアがプロ(仕事)のお手伝いはできませんので、これが最後です。
10分で書いたので細かいことは無視してサンプルを見てください。

------------------------------------------------
#!/usr/bin/perl

# 項目名
@item =(
'お名前',
'郵便番号',
'住所',
'TEL',
'E-Mail',
'性別',
'生年月日',
'○○',
'XXXXXX',
'パスワード'
);

# CSVファイル名
$csvfile = 'test.csv';
# 検索用データ(とりあえず固定で)
$SeekData = "2011/5/10 14:21:00";

&data_read("$SeekData");

sub data_read{
	# CSVファイル読み込み
	open(IN,"$csvfile") || die "Cannot file open!" . $csvfile;
	my @data = <IN>;
	close(IN);
	chomp @data;

	# 行数取得(0から)
	my $line = $#data;

	# ヘッダ出力
	&header("テスト");

	# タイトル行出力
	print <<"_EOM_";
<table cellspacing="2" cellpadding="3" border="1">
<tr>
<th>No.</th>
_EOM_

	foreach $i (0 .. $#item){
		print "<th style=\"text-align:center;\">【$item[$i]】</th>\n";
	}
	print "</tr>\n";

	$pcount = 1;
	# 各行を読み出し
	for ($count=0; $count<=$line; $count++){
		my($date,$name,$todouhuken,$adress,$tel,$email,$gender,$birth,$question,$ans,$pay) = split(/,/,"$data[$count]");
		# データ一致するか?(検索用データ&読み込んだデータ)
		if($SeekData eq $date){
			print <<"_EOM_";
<tr>
<td style="text-align:right;">$pcount</td>
<td>$name</td>
<td>$todouhuken</td>
<td>$adress</td>
<td>$tel</td>
<td>$email</td>
<td>$gender</td>
<td>$birth</td>
<td>$question</td>
<td>$ans</td>
<td>$pay</td>
</tr>
_EOM_

			$pcount++;
		}

	}
	print "</table>\n";
	&footer;
}

sub header{
	my $title = $_[0];

	print "Content-type: text/html\n\n";
	print <<"_EOM_";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<title>$title</title>
</head>
<body>
_EOM_

}

sub footer{
	print <<"_EOM_";
</body>
</html>
_EOM_

}

タイトルRe: あちこち手を出さなくても・・・
記事No8381
投稿日: 2012/03/10(Sat) 17:31
投稿者km
すみません、ありがとうございます!
HTMLテンプレート派閥で悩んでいましたが、
おやじさん流でいかせてもらいます。

タイトル今度は文字化けで詰まりました・・・・
記事No8384
投稿日: 2012/03/12(Mon) 16:53
投稿者km
すみません、kmです。

教えて頂いて作成したソースをコンパイルしたところ、日本語文字の部分がすべて文字化けしてしまいました。
文字化けぐらい検索したら出てくると思い、色々調べてjcode::convertを使ってShift-JISからEUCへの変換方法を見つけて行いましたが、何故か変換できません。

行ったことは
@Jcode.plとJcode.pmをダウンロードしてフォルダに入れる。
Aファイル設定(jcode.pmがある場所を相対パス指定)
use lib './lib';追加
use Jcode;追加
Bコード変換用
require '*****\lib\Jcode.pl';追加
Ajcode::convert(\$name,'euc');にて変換する。

を行ったのですが文字化けが解決しませんでした。
何が足りていないのでしょうか?

タイトルすみません、解決?しました。
記事No8385
投稿日: 2012/03/13(Tue) 10:25
投稿者km
すみません、kmです。
ブラウザのほうの設定を変えたら正しく表示されました(汗)
ソースを一生懸命見ていました・・・

タイトルすみません、また文字化けしてしまいました。
記事No8386
投稿日: 2012/03/16(Fri) 21:11
投稿者km
一旦解決したのですが、再び文字化けしてしまいました。
解決したと思ったのは、その時は、日本語文字を使ってなかったからです。日本語文字の出力をしようとすると文字化けしてしまいます。

解決策を自分なりに調べてやってみたのですが、うまくいきません。

行ってみたことは、Encode.pmを追加する。
use Encode;を記述
print "日本語表示テスト\n";
my $flagged_uft8 = decode 'enc-jp', $bytes;
print "Content-type: text/html\n\nOK1.\n"; exit(1);#ここまできたら終了し、okと出す。

エラーは
Can't locate EnCode.pm in @INC (@INC contains: ./lib /usr/lib/perl5/5.00503/i686-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i686-linux /usr/lib/perl5/site_perl/5.005 .) at /virtual/www/user_info3.cgi line 18.
BEGIN failed--compilation aborted at /virtual/www/user_info3.cgi line 18.

と、出ます。
かなり初歩的なミスだと思うのですが、今日1日調べて試してもできませんでした。

タイトルRe: すみません、また文字化けしてしまいました。
記事No8387
投稿日: 2012/03/18(Sun) 12:15
投稿者瀬戸っぷ   <setoppu@gmail.com>
>BEGIN failed--compilation aborted at /virtual/www/user_info3.cgi line 18.

で、18行目はなんと書かれています?

>Can't locate EnCode.pm in @INC

EnCode.pmはどこに置いています?

というか…日本語文字コードEUC-JPでないとダメなんですか?
UTF8で処理できるように対応した方がいいんじゃないですか?

タイトルEncode.pm requires perl5.7.3 or later.
記事No8388
投稿日: 2012/03/18(Sun) 15:31
投稿者おやじ
> 行ってみたことは、Encode.pmを追加する。

どうやって追加したのですか? 単に下記の「use Encode;を記述」のことを言ってませんか?
何故なら、下記のエラーでわかるとおり、Perlのバージョンが 5.005 なのに追加できるとは思えないのですが?
Encode.pmはperl5.7.3(実質5.8.x)以降しかサポートしていませんよ。

> use Encode;を記述
> print "日本語表示テスト\n";
> my $flagged_uft8 = decode 'enc-jp', $bytes;
> print "Content-type: text/html\n\nOK1.\n"; exit(1);#ここまできたら終了し、okと出す。
>
> エラーは
> Can't locate EnCode.pm in @INC (@INC contains: ./lib /usr/lib/perl5/5.00503/i686-linux /usr/lib/perl5/5.00503 /usr/lib/perl5/site_perl/5.005/i686-linux /usr/lib/perl5/site_perl/5.005 .) at /virtual/www/user_info3.cgi line 18.
> BEGIN failed--compilation aborted at /virtual/www/user_info3.cgi line 18.

No.8385でブラウザで解決したとありますが、サーバ設定を除いて文字化けを起こさないためには、

1. 外部から読み込むデータの文字コード
2. CGIそのものの文字コード
3. CGIで出力するHTMLのhead部で指定する出力するコンテンツの文字コード指定(<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">)
4. CGIで出力するHTMLの文字コード

の整合がとれていなければ駄目です。ブラウザで解決したということなので、恐らく3項と4項が不整合だからではないですか?

> かなり初歩的なミスだと思うのですが、今日1日調べて試してもできませんでした。

と、思います。原因も対処方法も初歩的なことと思います。

タイトルデバッグ中です。。。
記事No8392
投稿日: 2012/03/19(Mon) 18:24
投稿者km
すみません、kmです

経過報告だけでもさせてください;;

今デバッグ中です。-wと-dを覚えたので、それを使ってやってます。2個ほどタイポを直しました。
まだ出ているので、頑張ります。

タイトル今こんな感じです。
記事No8393
投稿日: 2012/03/19(Mon) 20:24
投稿者km
[Mon Mar 19 20:10:13 2012] [error] [] malformed header from script. Bad header=<html lang="ja">: /virtual/www/user_info4.cgi
Scalar value @item[$i] better written as $item[$i] at /virtual/www/user_info4.cgi line 62.
Use of uninitialized value at /virtual/www/user_info4.cgi line 62.
Use of uninitialized value at /virtual/www/user_info4.cgi line 68.
Use of uninitialized value at /virtual/www/user_info4.cgi line 70.
[Mon Mar 19 20:10:15 2012] [error] [] malformed header from script. Bad header=<html lang="ja">: /virtual/www/user_info4.cgi

62-78のソースはこんな感じです。
61 foreach $i (0 .. @item){
62 print "<th style=\"text-align:center;\">【@item[$i]】</th>\n";
63 }
64 print "</tr>\n";
65 $pcount = 1;
66 # 各行を読み出し
67 for ($count=0; $count<=$line; $count++){
68 my($date,$name,$todouhuken,$adress,$tel,$email,$gender,$birth,$question,$ans,$pay) = split(/,/,"$data[$count]");
69 # データ一致するか?(検索用データ&読み込んだデータ)
70 if($SeekData eq $date){
71 print <<"_EOM_";
72<tr>
73# Shift-JISにする?
74# 文字コードをShift-JISからEUC-JPに変換
75<!-- あ(MOJIBAKE TAISAKU) -->#文字化け対策@
76print "<!-- \xfd\xfe(MOJIBAKE TAISAKU)-->\n";#文字化け対策A

色々いじって、試しての繰り返しです・・・

タイトルなんとかエラー消しました。
記事No8398
投稿日: 2012/03/20(Tue) 16:54
投稿者km
すみません、kmです。
どうにかエラーは消しましたが、ちゃんと表示されません。

<HTMLに表示される>
日本語表示テスト print "" print " "; #_EOM_ # EOMここまで }# ヘッダー部分ここまで↑ # print "Content-type: text/html OK1. "; exit(1);#ここまできたら終了し、okと出す。 sub footer{ print <<"_EOM_"; No. お名前が未定義です。

たぶんEOMのあたりがバグっている気がします。

色々実験を繰り返した為、ソースがぐちゃぐちゃになってきましたが、貼り付けます・・・
今日もバグを作って消しての繰り返しでした。

ご指摘をお願いします。

#!/usr/bin/perl
# 項目名
@item = (
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j'
);
#ファイル設定(jcode.pmがある場所を相対パス指定)
use lib './lib';
# CGI.pmを利用するための準備
use CGI;
#$q = new CGI;
my $q = CGI->new;
# コード変換用
# CSVファイル名
$csvfile = '**.csv';
# 検索用データ(とりあえず固定で)
$SeekData = "2011/5/10 14:21:00";
&data_read("$SeekData");
sub data_read{
# CSVファイル読み込み
open(IN,"$csvfile") || die "Cannot file open!" . $csvfile;
my @data = <IN>;
close(IN);
chomp @data;
# 行数取得(0から)
my $line = @data;
$q->start_html;#html構文をスタートする(ここに書いていいのだろうか?)
# ヘッダ出力
&header("テスト");
# タイトル行出力
print <<"_EOM_";
<table cellspacing="2" cellpadding="3" border="1">
<tr>
<th>No.</th>
_EOM_
# Use of uninitialized value in pattern match対策処理
$i = 0;# $iを初期化してみる
if(defined $item[$i] && $item[$i] =~ /a/){# 定義されていれば
foreach $i (0 .. $item){
print "<th style=\"text-align:center;\">【$item[$i]】</th>\n";
}
}
else# 未定義の時
{
print "$item[$i]が未定義です。\n";
}
# 対策ここまで
print "</tr>\n";
$pcount = 1;
# 各行を読み出し
for ($count=0;$count<=$line;$count++){
my($date,$name,$todouhuken,$adress,$tel,$email,$gender,$birth,$question,$ans,$pay) = split(/,/,"$data[$count]");
# データ一致するか?(検索用データ&読み込んだデータ)
if($SeekData eq $date){
print <<"_EOM_";
<tr>
<!-- あ(MOJIBAKE TAISAKU) -->#文字化け対策@
print "<!-- \xfd\xfe(MOJIBAKE TAISAKU)-->\n";#文字化け対策A

_EOM_
$pcount++;
}
}
print "</table>\n";
&footer;
}
#my $flagged_uft8 = decode 'enc-jp', $bytes;
# 最初にヘッダーが動きます。↓
sub header{
my $title = $_[0];
print "Content-type: text/html\n\n";
print "日本語表示テスト\n";
print <<"_EOM_";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">"
print "<html lang=\"ja\">\n";
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<title>$title</title>
</head>
<body>
#_EOM_
# EOMここまで
}# ヘッダー部分ここまで↑
# print "Content-type: text/html\n\nOK1.\n"; exit(1);#ここまできたら終了し、okと出す。
sub footer{
print <<"_EOM_";
</body>
</html>
_EOM_
$q->end_html;
}