Code Comments
Programming Forum and web based access to our favorite programming groups.I have a file I am trying to read and write to, it's obviously opening
it ie.. No errors but not writing to it.
Since no errors are being produced I can't figure out why?
In short I am reading the file to see if I previously sent an email
concerning a "name" and if I have then don't send another email, if I
have not then do send an email.
I am pretty sure of the logic as I receive the email, but it is not
writing the new "name" to the file.
Above and below, I am opening another file read/write in the same way
and it works just fine. Any suggestions on how to check what's going on?
I am using strict, warnings and diagnostics and everything appears to be
clear.
File:
-rwxrwxrwx 1 root root 11 Jul 28 08:59 sent
1)
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Net::NBName;
use Fcntl ':flock';
use Net::Ping::External qw(ping);
our ($d,$m,$y)=(localtime(time-86400))[3..5];$m+=1;$y+=1900;
...
...
2)
our $done='/var/scripts/snmp/sent';
our %sent=();
...
...
3)
open (DONE,"+>>$done") or die "Cannot open file: $!";
flock (DONE, 1);
foreach (<DONE> ){
chomp($_);
$sent{$_}="";
}
....
...
if (exists $sent{$mapn}){
}else{
...
...
4)
}elsif($ns && ($ns->as_string =~ /^(.*)\s*\<00\>/i)) {
push @mailbody, "AN
UNAUTHORIZED Device Was Detected\n";
push @mailbody,
"$maprh,$maprb,$maprp,$maprm,$mapip,$1\n";
print DONE "$1\n";
...
...
5)
...
flock(DONE, 8);
close(DONE);
...
Thanks,
Rich
Post Follow-up to this messageOn Jul 29, arichmond(contr-ird) said: >I have a file I am trying to read and write to, it's obviously opening >it ie.. No errors but not writing to it. > > Since no errors are being produced I can't figure out why? You are opening a file for appending and reading. But you forgot (or didn't know) that you start out at the *end* of the file. >open (DONE,"+>>$done") or die "Cannot open file: $!"; > > flock (DONE, 1); You should really be using Fnctl.pm's file locking constants instead of numbers here. Anyway, here is where you should say: sDONE, 0, 0; to rewind to the beginning of the file. > foreach (<DONE> ){ Don't do that. Use a while loop instead, PLEASE. -- Jeff "japhy" Pinyan % How can we ever be the sold short or RPI Acacia Brother #734 % the cheated, we who for every service http://japhy.perlmonk.org/ % have long ago been overpaid? http://www.perlmonks.org/ % -- Meister Eckhart
Post Follow-up to this messageOn Jul 29, japhy@perlmonk.org said: I didn't thanks for the tip >open (DONE,"+>>$done") or die "Cannot open file: $!"; > > flock (DONE, 1); Thanks, I read the perldocs and all the referring docs and understand now what I am really trying to do Fixed this and all the others throughout my script and it works beautifully now, thanks for the help.
Post Follow-up to this message
Show a Printable Version
Email This Page to Someone!
Receive updates to this thread
Powered by vBulletin
Copyright 2000-2006 Jelsoft Enterprises Limited.