Hi,
Here's a quick question. This doesn't have anything to do with perl on
my mac, but just a perl question. I have a a small script that simply
increases a number by 1, when it is run, then writes the changes back
to the file. I am using it to check how many people come to the site by
way of an email. Everything seemed to work fine until I got here this
morning and the file was only left with 1 row of 1 number verses 2 rows
of 10 numbers each.
Here is what the file should look like
(The zeros would not necessarily be zeros, but could be any number.
0:0:0:0:0:0:0:0:0:0
0:0:0:0:0:0:0:0:0:0
What I have found is that when I click at a normal pace, everything
works fine, BUT... when I click the reload button unmercifully, the
data file gets rewritten to look like the following:
0 (or some other number - less then what it was previously)
That's it! everything else is gone. Is is possible that if there are so
many hits that it can't keep up with the opening and writing of the
file? This simple database is potentially being alter by 2 million
people, as the email went out to that many people.
Any help would be greatly appreciated. Below is the script.
Thanks,
Mark Wheler
Here is the script:
----------------------------------------------------------------------
#!/usr/local/bin/perl -w
#=======================================================
# format for "ab" variable in html email:
#
# control(0)/test(1):week(1-10)
#
# So 0:5 would be control group, week 5 and 1:9 would be
# test group, week 9
#=======================================================
use strict;
use CGI ':standard';
if (!-e "blastinfo-test.txt") { # Create blastinfo-test.txt file in not
in place
open (FILE, "> blastinfo-test.txt") || die ("Cannot open file");
flock (FILE, 2);
print FILE "0:0:0:0:0:0:0:0:0:0\n0:0:0:0:0:0:0:0:0:0";
close (FILE);
}
#=======================================================
# Set and get variables
#=======================================================
my $pathtolandingpage='../email_blasts/carnival/carnival1.html';
my $pathtodatafile='blastinfo-test.txt';
my @blasts_split;
my $ab = param('ab');
my @ab_split = split(/:/, $ab);
$ab_split[1]--;
#my $anchor = param('anchor');
open (FILE, "< $pathtodatafile") || die "$!";
flock (FILE, 2);
my @blasts = <FILE>;
close (FILE);
if ($ab_split[0] eq "0") {
chomp($blasts[0]);
@blasts_split = split(/:/, $blasts[0]);
$blasts_split[$ab_split[1]]++;
$blasts[0] = join(":", @blasts_split)."\n";
} else {
@blasts_split = split(/:/, $blasts[1]);
$blasts_split[$ab_split[1]]++;
$blasts[1] = join(":", @blasts_split);
}
#====================================================
# Write changes back to file
#====================================================
open (FILE, "> $pathtodatafile") || die ("Cannot open file");
flock (FILE, 2);
print FILE @blasts;
close (FILE);
#====================================================
# Send to landing page at correct anchor
#====================================================
print "Location: $pathtolandingpage\n\n";
exit;
------------------------------------------------------