CGIでアクセスログの前に連番をつけるには?
まさや
[E-Mail]
1999/10/20(水) 17:32:07
すみません。一番かんじんなところがバケてしまいました。
open(LOG,"a_log.dat") || die "Can't Open User Access Log: $!\n";
while($_ = <LOG>){
@lines=<LOG>;
for($i = 1; $i <= @lines; $i++){
print "$i:$_\n";
}
}
close(LOG);
です。
よろしくお願いします。
B-Cus
1999/10/20(水) 17:45:53
よいね~。具体的だし、ソースもあげてるし、実行例も見られるし、
perl のバージョンも書いてあるし、素晴らしい質問の仕方だね~。
実際の書き方としては、
$count = 1;
while ($_=<LOG>){
print "$count: $_";
$count++;
}
あるいは
$count = 1;
@lines = <LOG>;
foreach $_ ( @lines ){
print "$count: $_";
$count++;
}
あるいは
@lines = <LOG>;
for ( $count=1 ; $count<=@lines ; $count++ ){
print "$count: $lines[$count]";
}
などすればいいでしょう。どれを取るかはお好みで。
特にこだわりがないなら、1番目の書き方がお勧め。
なぜうまく動かないかというと、
while($_ = <LOG>){
で最初の1行を $_ に代入。
@lines=<LOG>;
で、残りの行全部を @lines に代入。だからwhile で取った先頭の1行が少なくなる。
print "$i:$_\n";
ここでは、whileで代入した先頭行が $_ に入っているので、常に
同じ値になる。だから
http://www2u.biglobe.ne.jp/~kotonoha/cgi-bin/3.cgi
の内容は全部の行が同じでしょ?