Lesson4 アクセスウンタ
    [実行結果]
    あなたは 5796 人目のお客様です。

    [SHTMLの記述]
      
    あなたは <!--#include virtual="../../cgi-bin/mycgi/study/count.cgi" --> 人目のお客様です。
count.cgi ソース

#!/usr/local/bin/perl

#★「filename」という変数名に"./count.log"というファイル名を設定しています。
# Perlでは変数名には$をつけます。このファイルに現在のカウント数を書こんでいきます。

$filename = "./count.log";

#★「filename」を開きます。filenameの前についている +< は読書きできるモードでファイルを開く 旨を指定する記号です。

open( FILE, "+<$filename" );

#★flocは同時書込みを防止する関数です
#サーバーによっては使えない場合があります
flock( FILE, 2 );

#★count = <FILE> でファイルから1行読みこんで、countという名前の変数に設定します。また、読みこんだ1行の最後には「改行文字」がついているので、chop( 文字列 ) で改行をはずしています。

#★「chop」は文字列の最後の文字を切り落とす関数で、入力レコード末の改行を削除するために使われる
chop( $count = <FILE> );

#★よみこんだ$count変数に1を加算しています。
#($count++ は $count = $count + 1 と書くのと同じ意味です。)

$count++;

#★さっき、ファイルから1行読み込んでいるため、現在は2行目を指しています。
#そのため seek という命令で、ファイルの先頭(0)を指すように指定しています。

seek( FILE, 0, 0 );

#★ファイルに1カウントアップした$countを書きだしています。
print FILE "$count\n";

#★ファイルをクローズしています。

flock( FILE, 8 );
close( FILE );

#★ブラウザに"これから返却するデータはHTMLだよ"と教えています。
print "Content-type:text/html\n\n";

#★ブラウザにカウントアップした値を表示します。
#「printf」は書式を付けてプリントする命令です。
#「f」は書式(フォーマット)の意味です。
#"%04d"が書式の指定です。"%04d"と書くと「4桁で先頭に0を付けて値を入れる」という意味になります。
#【例】countの値が"3"であれば"0003"という値が出力されます。

print "<HTML>";
printf("%04d", $count );
print "</HTML>";

exit;