Perl计数器
一、Unix WEB 服务器环境下
# Unix WEB服务器网页中的调用格式:
# 欢迎你,第<!-- #exec cgi="/cgi-bin/count.pl?usr=yuyong&gif=a" -->位朋友。
Perl 源程序

$|=1;
if($ENV{'REQUEST_METHOD'} eq "POST"){
 read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
} elsif($ENV{'REQUEST_METHOD'} eq "GET") {
 $buffer=$ENV{'QUERY_STRING'};
}
@pairs=split(/&/,$buffer);
foreach $pair(@pairs) {
 ($name,$value)=split(/=/,$pair);
 $value=~tr/+//;
 $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
 $FORM{$name}=$value;
}

$ct_lg=8;
$ct_file="cgi-bin\\count\\$FORM{'T1'}";
print "Content-type:text/html\n\n";
if(-e "$ct_file") {
 open(file,"<$ct_file");
 $cter=<file>;
} else {
 $cter="0";
}
close(file);
$cter++;
open(file,">$ct_file") || die "can't write file!\n";
print file $cter;
close(file);
$lg=length($cter);
for ($i=0;$i<($ct_lg-$lg);$i++) {
 print "<img src=/cgi-bin/count/0.gif>";
}
for($i=0;$i<$lg;$i++){
 $gf=substr($cter,$i,1);
 print "<img src=/cgi-bin/count/$gf.gif>";
}
exit(0);

二、NT IIS 或win95/98 Personal WEB环境下:
   在此环境下不支持<img src="/cgi-bin/counter.pl?yuy&gif=e">和<!-- #exec cgi="/cgi-bin/counter.pl?yuy&gif=e" --> 这两种调用perl 计数器的方法,让我大伤脑筋。
  我又用FrontPage 中的WebBot格式(<!-- webbot       -->)也不行,  后来我用frame、javascript、perl结合起来,实现了自己的计数器。
  该计数器支持多用户多显示规格,条件成熟的话还可为网友们提供免费计数服务。
  
Perl 源程序

# /cgi-bin/counter.pl?usr=<用户名>&gif=[a|b|c|d|e|f| |]
# 非微软WEB服务器网页中的调用格式:
# 欢迎你,第<!-- #exec cgi="/cgi-bin/count.pl?usr=yuyong&gif=a" -->位朋友。
$|=1;
$buffer=$ENV{'QUERY_STRING'};
@pairs=split(/&/,$buffer);
foreach $pair(@pairs) {
 ($name,$value)=split(/=/,$pair);
  $value=~tr/+//;
  $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  $FORM{$name}=$value;          #获得counter.pl?usr=xx&gif=a传来的
}                  #参数,usr: xx gif: a

$ct_lg=8;                     #计数器显示位数
$ct_file="$FORM{'usr'}.dat";    #可为不同页面或用户提供计数文件
if(-e "$ct_file") {             #文件存在,便读方式打开
  open(file,"<$ct_file");
  $cter=<file>;
} else {
  $cter="0";                   #文件不存在,计数值为0
}
close(file);
$cter++;                      #计数值为+1
open(file,">$ct_file") || die "can't write file!\n";
print file $cter;             #重写文件
close(file);
$lg=length($cter);        #获得计数值的8位长的字符串,不足补“0”
for ($i=0;$i<($ct_lg-$lg);$i++) {
 $cter="0$cter";
}
# 将计数值($cter)与字体样式($FORM{'gif'})
# 作为父页的JavaScript函数myload()的参数,并
# 调用parent.myload(x,y)。
print "Content-type:text/html\n\n";
print "<HTML>\n<BODY BGCOLOR=WHITE>\n";
print "<script language=\"JavaScript\">\n";
print "parent.myload\(\"$cter\",\"$FORM{'gif'}\"\);\n";
print "</script>\n</BODY>\n</HTML>";
exit(0);