RE: Checking to see if file exists.
- From: tvadnais@xxxxxxxxxxxxx (Tvadnais)
- Date: Tue, 29 Jul 2008 19:06:26 -0700
Somehow my response got mangled a tad. I'm editing the middle part:
.......
and got the same results. (The test failed.)
I've tried:
(-e substr ($file, 0, index($file, ".pgp"))),
(-e $tmpfile), (-e "$tmpfile"),
(-e "$RDYdir\/$tmpfile"),
(-f $tmpfile),
(-e "F0715PAY.TXT") <--- This is the only one that worked.
Here is the true code if that helps:
........
Thanks,
Tim
-----Original Message-----
From: tvadnais [mailto:tvadnais@xxxxxxxxxxxxx]
Sent: Tuesday, July 29, 2008 7:00 PM
To: beginners@xxxxxxxx
Subject: RE: Checking to see if file exists.
Ken,
Thank you for your quick response.
I changed the code from:
if (-e $tmpfile) {
to:
if (-f $tmpfile) {
and got the same results. (The test failed.)
(-e substr ($file, 0, index($file, ".pgp"))),
(-e $tmpfile),
(-e "$tmpfile"),
(-e "$RDYdir\/$tmpfile")
(-f $tmpfile)
(-e "F0715PAY.TXT") <--- This is the only one that worked.
Here is the true code if that helps:
I've tried:
foreach my $file ( @currset )
{
my $tmpstr = substr ($file, 0, index($file, ".pgp"));
print ("trying to delete $tmpstr \n");
## pgp will core dump if there's already an unencrypted file
## with the destination source name... So we have to remove the
## previously decrypted file if it exists.
unlink ($tmpstr);
$tmpstr = "/usr/local/bin/pgp -z 'Chars process for WSHA' $file";
if (system($tmpstr) == 0) {
$notice .= LogMsg (MSG => "system $tmpstr failed: $?", DEBUG =>
$debug);
} else {
my $tmpfile = substr ($file, 0, index($file, ".pgp"));
print cwd();
chomp($tmpfile);
if (-f $tmpfile) {
$notice .= LogMsg (MSG => "Deleteing PGP file from RDY
directory: $file", Echo => $debug);
## Remove the PGP file; it's already been archived.
unlink ($file);
$file = substr ($file, 0, index($file, ".pgp"));
$notice .= LogMsg (MSG => "copying unencrypted to HST directory
as: $file.$datestr", Echo => $debug);
## archive new unencrypted file with today's date
copy ($file, "$HSTdir/$file.$datestr");
$notice .= LogMsg (MSG => "moving unencrypted to HST directory
as: $file", Echo => $debug);
## change file permissions so users can upload file.
chmod 0666, $file;
## move file to archive directory with correct name.
## this file will be deleted upon file upload.
move ($file, "$HSTdir/$file");
} else {
my $msg = LogMsg (MSG => "The call to PGP failed on file:
$file", Echo => $debug);
EmailNotice(LIST => [$file], DEBUG => $debug, MSG => $msg,
WHO => \@alert_notify);
$notice .= "The call to PGP failed on file: $file\n";
}
}
}
-----Original Message-----
From: Kenneth Wolcott [mailto:kennethwolcott@xxxxxxxxx]
Sent: Tuesday, July 29, 2008 5:38 PM
To: beginners@xxxxxxxx
Subject: Re: Checking to see if file exists.
On Tue, Jul 29, 2008 at 2:32 PM, tvadnais <tvadnais@xxxxxxxxxxxxx> wrote:
I am totally confounded by what appears to be a bug in the "does filea
exist"
functionality.
Here is the code as it stands now:
my $tmpfile = substr ($file, 0, index($file, ".pgp"));
print cwd(); ## debug code: to make sure we're in the correct
directory
chomp($tmpfile); ## debug code: Added this to see if there was any thing
funny in the file name.
if (-e $tmpfile) {
# if (-e "$tmpfile"){ ##This doesn't work
# if (-e "F0715PAY.TXT") { ## This does work, but it needs to be
variablethis
## Do magic stuff to file.
} else {
## Send error message
}
I stepped through the code with the debugger for the above snippet and
is what I got (with a few minor edits for clarity sake)that
The following files were found in directory: F0715PAY.TXT.pgp,
J0715PAY.TXT.pgp, C0715PAY.TXT.pgp
main::(rmain.pl2): my $tmpfile = substr ($file, 0, index($file, ".pgp"));
DB<> n
DB<> x $tmpfile
0 'F0715PAY.TXT.pgp'
DB<> /xfer/test/RDY
main::(rmain.pl2): chomp($tmpfile);
DB<> n
main::(rmain.pl2): if (-e $tmpfile) {
DB<> x $tmpfile
0 'F0715PAY.TXT'
DB<> n
main::(rmain.pl2): LogMsg (MSG => "Couldn't find $F0715PAY.TXT", Echo =>
$debug);
In a nutshell:
If I hard code in a file that I know exists, then the conditional (-e
filename) comes back true.
If that same file name is passed to the conditional in variable form, then
(-e $filename) and (-e "$filename") returns false.
I also tried passing in the full path name, with no success.
Yes, I do have permissions to read the file.
The OS is AIX UNIX if that makes any difference.
The "Send error message" includes email notification that the PGP
unencryption didn't work, so it's critical I don't just blindly assume
the PGP decryption worked.
The "Do magic stuff" includes zipping and archiving the PGP file of to an
archive directory.
Any thoughts you anyone has would be greatly appreciated.
Tim
See what happens if you don't quote the variable in your if statement and
use -f rather than -e.
Replace this:
if (-e "$tmpfile")
with this:
if (-f $tmpfile)
perldoc -q quoting
Found in /usr/lib/perl5/5.10/pods/perlfaq4.pod
What's wrong with always quoting "$vars"?
The problem is that those double-quotes force
stringification--coercing
numbers and references into strings--even when you don't want them to
be strings. Think of it this way: double-quote expansion is used to
produce new strings. If you already have a string, why do you need
more?
If you get used to writing odd things like these:
print "$var"; # BAD
$new = "$old"; # BAD
somefunc("$var"); # BAD
You'll be in trouble. Those should (in 99.8% of the cases) be the
simpler and more direct:
print $var;
$new = $old;
somefunc($var);
Otherwise, besides slowing you down, you're going to break code when
the thing in the scalar is actually neither a string nor a number,
but
a reference:
func(\@array);
sub func {
my $aref = shift;
my $oref = "$aref"; # WRONG
}
You can also get into subtle problems on those few operations in Perl
that actually do care about the difference between a string and a
number, such as the magical "++" autoincrement operator or the
syscall() function.
Stringification also destroys arrays.
@lines = `command`;
print "@lines"; # WRONG - extra blanks
print @lines; # right
I hope this helps,
Ken Wolcott
--
To unsubscribe, e-mail: beginners-unsubscribe@xxxxxxxx
For additional commands, e-mail: beginners-help@xxxxxxxx
http://learn.perl.org/
.
- Follow-Ups:
- RE: Checking to see if file exists.
- From: Mr. Shawn H. Corey
- RE: Checking to see if file exists.
- References:
- Checking to see if file exists.
- From: Tvadnais
- Re: Checking to see if file exists.
- From: Kenneth Wolcott
- RE: Checking to see if file exists.
- From: Tvadnais
- Checking to see if file exists.
- Prev by Date: RE: Checking to see if file exists.
- Next by Date: RE: Checking to see if file exists.
- Previous by thread: RE: Checking to see if file exists.
- Next by thread: RE: Checking to see if file exists.
- Index(es):
Relevant Pages
|