in reply to simple IP counter..

use strict; use Fcntl ':flock'; my ($mday,$mon,$year) = (localtime(time))3,4,5; $year=$year+1900; if ($mday < 10) {$mday = "0$mday";} if ($mon < 10) {$mon = "0$mon";} my $month = ++$mon; my $date = "$mday.$month.$year"; my $file = "counter.txt"; my $host = $ENV{'REMOTE_HOST'}; my $ip = $ENV{'REMOTE_ADDR'}; my ($uq,@counter,@counter_data); open(COUNTER, "$file") || &error("cannot open file for read"); @counter = <COUNTER>; close(COUNTER); for(@counter) { chomp; @counter_data = split (/\|/, $_); if ($counter_data[0] eq $date && $counter_data1 eq $ip && $counter_d +ata2 eq $host) { $uq = 1; } } if (!$uq) { open (COUNTER, ">>$file") || &error("cannot open file for write"); flock (COUNTER, 2); print COUNTER "$date|$ip|$host\n" or die; close(COUNTER) or die; } sub error { my $error = $_[0]; print "$error\n"; exit; }

Replies are listed 'Best First'.
Re^2: simple IP counter..
by ww (Archbishop) on Aug 31, 2009 at 11:07 UTC

    For a guess, you're wondering (did you forget to ask a question?) why this won't compile.

    use strict; use Fcntl ':flock'; #792341 my ($mday,$mon,$year) = (localtime(time))[3,4,5]; $year=$year+1900; if ($mday < 10) { $mday = "0$mday"; } if ($mon < 10) { $mon = "0$mon"; } my $month = ++$mon; my $date = "$mday.$month.$year"; my $file = "counter.txt"; my $host = $ENV{'REMOTE_HOST'}; my $ip = $ENV{'REMOTE_ADDR'}; my ($uq,@counter,@counter_data); open(COUNTER, "$file") || &error("cannot open file for read"); @counter = <COUNTER>; close(COUNTER); for(@counter) { chomp; @counter_data = split (/\|/, $_); if ($counter_data[0] eq $date && $counter_data1 eq $ip && $counte +r_d +ata2 eq $host) { $uq = 1; } } if (!$uq) { open (COUNTER, ">>$file") || &error("cannot open file for +write"); flock (COUNTER, 2); print COUNTER "$date|$ip|$host\n" or die; close(COUNTER) or die; } sub error { my $error = $_[0]; print "$error\n"; exit; }

    Some answers, found with perl -c 792341.pl

    Global symbol "$counter_data1" requires explicit package name at 79234 +1.pl line 30. Global symbol "$counter_d" requires explicit package name at 792341.pl + line 30. Bareword "ata2" not allowed while "strict subs" in use at 792341.pl li +ne 30. 792341.pl had compilation errors.

    Please see Writeup Formatting Tips and Markup in the Monastery.

    And it wouldn't hurt to include use warnings; along with strict.

    Update: Missed the missing "[...]". Corrected that and the error messages