in reply to Slightly OT: Perl and CGI - reading a file

Looks like $ENV{PWD} is undefined. Try to replace $current_directory with the real path.
Boris

Replies are listed 'Best First'.
Re: Re: Slightly OT: Perl and CGI - reading a file
by C_T (Scribe) on Mar 30, 2004 at 23:52 UTC
    Sorry for the dumb question, but this is all new to me.

    How do I find the "real path"? This is on a paid service's webserver (i.e., commercial hosting site).

    I know how to get the current directory path when I'm logged into the shell on my server here, but I don't log into their webserver in the same way, I just log into www.myURLhere.com using an FTP client and upload the web pages.

    Again, I know this is a dumb question, but I'm very new to the whole CGI and Unix shell world.

    CT

    Charles Thomas
    Madison, WI

      Upload this script and run via CGI:

      #!/usr/bin/perl use Cwd; print "Content-Type: text/html\n\n"; print "<p>Perl says CWD is: ", cwd(); print "<p>System PWD says: ", `pwd`;

      cheers

      tachyon

        Apparently they're both returning nothing. I get:

        Perl says CWD is: System PWD says:

        As output.

        Charles Thomas
        Madison, WI
      How do I find the "real path"? This is on a paid service's webserver (i.e., commercial hosting site).

      Some ways:

      • use Cwd; to get the current directory. Hopefully, that is the path the script is in — usually that is the case. Other people have showed you here how to use it.
      • Same effect, somewhat simpler: use File::Spec::Functions 'rel2abs'; which can be used to convert a file path to an absolute path:
        use File::SPec::Functions 'rel2abs'; my $abspath = rel2abs("produce_items.txt");
      But, to be honest, I don't expect these to work, because if opening a relative path doesn't work because the file doesn't exist, using an absolute path for the same location will most likely have the very same effect.

      So, you're better off hardcoding the absolute path to your data file.

      If that isn't a most favourable option, you can still try to find the position of the script using FindBin, and locate the data file from there:

      use FindBin; my $abspath = "$FindBin::Bin/produce_items.txt";

      Still, I believe you're best off moving your data out of your web space, to an absolute location, with a prereably a simple path, and hardcode it into your script.