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;

------------------------------------------------------

Reply via email to