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

Dear Monks,

I have a perl program where I need certain files to run it. What I want to do is have the ability to install the program anywhere on a windows system, but have the program know where the files are. Right now I have the path of the files hardcoded in my program. Does anyone know of any functions that allow the paths to be variable in my perl code, but keep the same filename?

Thanks for any help

Replies are listed 'Best First'.
(jeffa) Re: Variable path
by jeffa (Bishop) on Feb 17, 2003 at 20:34 UTC
    I like to use a 'global' variable like so:
    our $PATH = '/path/to/the/files'; # note no trailing slash my $fullpath = "$PATH/foo.txt";

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)
    
Re: Variable path
by chromatic (Archbishop) on Feb 17, 2003 at 20:38 UTC

    Several possibilities:

    • Look in a series of locations for a file. The user's home directory, a system configuration directory, the application directory...
    • Require an environment variable to contain the correct path.
    • Write the installation location to your program when you're installing it.
Re: Variable path
by steves (Curate) on Feb 17, 2003 at 22:00 UTC

    You can also code in defaults and allow command line overrides (such as specifying a root file directory) using something like Getopt::Long or Getopt::Std.

    If the files are always relative to the installed script you can use FindBin to find the full path of your Perl script.

Re: Variable path
by bart (Canon) on Feb 18, 2003 at 00:09 UTC
    Just a few ideas: FindBin::Bin and Cwd. I believe both come with Perl.

    The former can be used to check out where you script resides — theoretically, I've had too many cases where it fails, including in programs "compiled" (or at least processed) using perl2exe/PerlApp.

    The latter can be used to determine the current (working) directory, hence the abbreviation. All too often, this is the location where your script is started up from. On Windows, if anybody creates a shortcut to your program, a .lnk file, the working directory to run the program under, is also stored inside the shortcut file. By default, this is the directory to the program.

    IMO people are generally willing to accept the program's need to be run in a specific directory, especially if the behaviour of the program depends on this directory. For example, it or a subdirectory may contain datafiles to be used in a specific setup. Just changing the working directory allows people to have multiple setups.

Re: Variable path
by jasonk (Parson) on Feb 17, 2003 at 20:36 UTC

    You don't provide any code and don't indicate what kind of files or how you are loading them, so the best we can do is guess. Try 'perldoc lib', or provide some detail about what it is you are actually trying to do.