Re: Dumb path question

[email protected] (David Green)
Newsgroups perl.macosx
Message-ID <[email protected]>
Remember also that the "caller" function can say what the location of  
the file (package) is, in relation to the host filesystem.  Read  
about it, it may be of use ;)

David


On 9 Mar, 2009, at 23:24, Chris Devers wrote:

> This isn't necessarily a Mac-specific question, but I've gotten rusty
> and I'm having a brain fart here.
>
> How can a Perl script reliably, portably resolve the path inside which
> it is running? Not the PWD of the caller, mind you, but the actual
> current full path of the script itself?
>
> Context: I have a pair of utility apps meant to be run in tandem. The
> first is a Pashua questionnaire that shows some forms and saves  
> results
> to a file. The second is a Platypus script that gets admin access  
> (hence
> needing another app -- I couldn't see how to get Pashua to prompt for
> admin access), then uses the results from the first app to do some
> `defaults write ...` & `sudo networksetup ...` type system calls.
>
> Because the apps are meant to be distributed & run together, I've  
> placed
> the second one inside the Contents/Resources/ folder of the first one,
> which finishes with (simplifying slightly):
>
>   my $helper = "$ENV{'PWD'}/../Resources/Helper.app";
>   system("/usr/bin/open "$helper'") and die "Couldn't run $helper:  
> $!";
>
> If I first put the first app in /Applications, this works fine.
>
> The problem is I can't rely on $ENV{'PWD'} having something useful.  
> If I
> move the parent app from /Applications (to the Desktop, a USB drive, a
> disk image, or a Samba volume), or if I invoke the Pashua script  
> from a
> shell, then the $helper variable typically ends up with something
> useless (often but not always just "/../Resources/Helper.app") and the
> second app never executes.
>
> I've thought of a few ways around this (e.g. wrap the whole thing  
> in an
> installer package so I can force & depend on a single path), but they
> all seem cumbersome to varying degrees. Ideally, it should behave  
> like,
> say, Firefox, where it will run the same way no matter where the user
> wanted to put (or not bother to put) the app bundle.
>
> Is there a common way to do this? What $ENV variables can be relied on
> to have the full path to the running Perl script from which a working
> relative path can be derived? Is there some other way that this is
> already a Solved Problem, or should I just muddle through?
>
> Any help very much appreciated :-)
>
> Pashua:
> http://www.bluem.net/en/mac/pashua/
> http://macresearch.org/ 
> command_line_tutorial_part_iii_windows_of_opportunity
>
> Platypus:
> http://www.sveinbjorn.org/platypus
> http://www.macresearch.org/ 
> command_line_tutorial_part_i_native_mac_apps_for_command_line_tools
> http://www.macresearch.org/ 
> command_line_tutorial_part_ii_making_progress_and_finding_options
>
>
>
> -- 
> Chris Devers

David Green
[email protected]

"Where you stand determines what you see." -- SAMUEL A. CULBERT
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.