use strict; use warnings; use CGI; use Getopt::Long; use FindBin; use Fcntl q(:flock); use constant FILENAME => "FindBin::Bin/file.csv"; open my $self_fh, "< $0" or die "Cannot open self: $!"; flock $self_fh, LOCK_EX or die "Cannot obtain an exclusive lock: $!"; open my $infh, '<', FILENAME or die "Unable to open input file: $!"; open my $outfh, '>', FILENAME . '.out' or die "Unable to open output file: $!"; my $q = CGI->new; chomp ( my $fqdn = $q->param('fqdn') ); chomp ( my $address = $q->param('address') ); while( <$infh> ) { s/RECORDNAME/$fqdn/; s/RECORDIP/$address/; print $outfh $_; } close $infh; close $outfh or die "Failed to close output file: $!"; rename FILENAME . '.out', FILENAME or die "Unable to replace original file: $!"; close $self_fh or die $!; # Releases the lock. print "Content-type: text/plain\n\n"; print "$address / $fqdn";