Home > Archive > PERL Beginners > July 2004 > File not being written to and no errors?
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
File not being written to and no errors?
|
|
| Arichmond 2004-07-29, 8:55 am |
| 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
| |
| Jeff 'Japhy' Pinyan 2004-07-29, 3:56 pm |
| On 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:
s DONE, 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
| |
| Arichmond 2004-07-29, 3:56 pm |
|
On Jul 29, japhy@perlmonk.org said:
[color=darkred]
I didn't thanks for the tip
[color=darkred]
>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
[color=darkred]
Fixed this and all the others throughout my script and it works
beautifully now, thanks for the help.
|
|
|
|
|