greymoose has asked for the wisdom of the Perl Monks concerning the following question:

I have a cgi-script that is supposed to run another script via system and then open a txt file to read two lines of data. All is fine until it tries to open the file. In both terminal and browser I get the error message 'No such file or directory.' No amount of googling or searching the archives in the Monastery has helped me. As far as I can tell the file is valid because: The script follows including the test for the file which is really only for troubleshooting:
#!/usr/bin/perl -w use lib "/usr/local/lib/perl/lib/perl5/site_perl/5.8.8"; use CGI qw(:standard); use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use strict; print header; my ($x, $y); my $datafile = "/full/path/to/file/data.txt"; system("perl /full/path/to/file.cgi")==0 or die "system failed $?" +; if(!(-w $datafile)){ print "What file?<br>"; } else{ open (FILE, '<', '$datafile') || die "Could not read $datafile $!\ +n"; $x = <FILE>; $y = <FILE>; close (FILE); } print $x."<br>"; print $y."<br>";
I'd appreciate any thoughts on why the same script is getting different results in relation to exactly the same file.
  • Comment on File exists when confirmed in script but not when open is attempted by same script
  • Download Code

Replies are listed 'Best First'.
Re: File exists when confirmed in script but not when open is attempted by same script
by ikegami (Patriarch) on Jun 12, 2009 at 02:23 UTC

    You check if the file named by the value of $datafile is writable, then you try to open the file named $datafile which doesn't exist. Get rid of those quotes!

    By the way, if you declared $x and $y where you actually gave them a value, you wouldn't be trying to print out variables you haven't initialized.

    #!/usr/bin/perl -w use strict; use warnings; use lib "/usr/local/lib/perl/lib/perl5/site_perl/5.8.8"; use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use CGI qw(:standard); print header; my $datafile = "/full/path/to/file/data.txt"; system('perl', '/full/path/to/file.cgi')==0 or die "system failed $?/$!"; open(my $fh, '<', $datafile) or die "Can't open file $datafile: $!\n"; chomp( my $x = <$fh> ); chomp( my $y = <$fh> ); print "$x<br>\n"; print "$y<br>\n";
      Doh! I thought it would be something stupid. Thanks for the help.
      Point taken about printing the uninitialized variables, too. The file is checked in the called script so it won't be in this one when it is complete, as a result the problem will cease to exist. Nonetheless I obviously need to be more observant. Thanks for the pointer.