上にカウンターを表示しています.
カウンター値は、実験のため大きな値にしています。
ブラウザの更新ボタンを押してみてください、カウンター値が上がっていきます。

#!/usr/bin/perl
require 'gifcat.pl'; 使用するサブルーチンの格納されているファイルを宣言
$lock_file = "edperl13_3.lock"; ロック用ファイルを指定
&lock; ロック用サブルーチンをコール
open(IN,"cnt.dat") || &error(1); cnt.datはカウンタ値保存用ファイル
$cnt = <IN>; カウンタ値の読込み
close(IN); ファイルのクローズ
$cnt++; カウンタ値を1UP
open(OUT,">cnt.dat") || &error(1); cnt.datを書込みオープン
print OUT $cnt; カウンタ値の書込み
close(OUT);
unlink($lock_file); ロックを解除
while(0 != $cnt){
    $num_gif = $cnt % 10; 各ケタの値を計算
    unshift(@files, "c1_$num_gif.gif"); 各ケタのgifファイル名を配列に設定
    $cnt = int($cnt / 10);
}
print "Content-type: image/gif\n\n"; gifデータを送ることをブラウザへ通知
print &gifcat'gifcat(@files); カウンター用gifファイルを合成して出力
exit; ここでプログラム終了
sub lock {
    $retry = 5; ロック解除リトライ回数
    while (!symlink(".", $lock_file)) { ロック
        if (--$retry <= 0) { &error(0); } すでに、ロック中
        sleep(1); 1秒待つ
    }
}
sub error {
    if ((-e $lock_file) && ($_[0] != 0)){ unlink($lock_file); } ロックの解除
    @err_msg = ('47','49','46','38','39','61','3b','00''・・・・); エラーエッセージ用gifパターン
    print "Content-type: image/gif\n\n"; gifデータを送ることをブラウザへ通知
    foreach (@err_msg) {
        $data = pack('C*',hex($_));
        print $data; gifデーターを1byteずつブラウザへ送る
    }
    exit;
}

戻る