# subroutine name: readdata # Reads all data from datafile # If error occurs (e.g. file doesn't exist), makes CGI process exit with error # Returns: reference to the array of lines, trailing "\n" in each # line is not removed # Global variables used: # $no_flock - disable flock or not sub readdata { my($datafile) = @_; my @data; # If OS (like Win95) desn't support flock, we have to # go unreliable and slow way and create "lock" file GetFileLock("$datafile.lock"); local *DATA; if (open(DATA,"<$datafile")) { # shared locking flock(DATA, 1) unless ($no_flock); my $line; while ($line = ) { push (@data, $line); }; # unlock file flock(DATA, 8) unless ($no_flock); close(DATA); ReleaseFileLock("$datafile.lock"); } else { ReleaseFileLock("$datafile.lock"); die("Error in subroutine readdata: Can't open $datafile. Reason: $!"); }; return \@data; }