most elegant way to find an installed datafile directory

most elegant way to find an installed datafile directory

am 07.07.2006 15:07:14 von alexxx.magni

I continue on an old topic, on which I received some help
(I cannot find anymore the link to the discussion, sorry):
>....
>I'm beginning to use MakeMaker and have some problems with it: I need
>to install some auxiliary data files, and I can't figure out how to tell that to MakeMaker.
> e.g. I'd like that my final install would include some data files under /etc/projectname/
> so: 1) where do I put them originally? (in lib/etc for example?)
> and 2) how do I tell MakeMaker to install them in /etc/projactname ?

then:

> I correct myself on a point: I just checked that if I put my datafiles
> in a directory like projectname/lib/datafiles/... they are all
> installed for good, in my computer under /usr/lib/perl5/site_perl/5.8.6/projectname/datafiles/...
> This compromise I could accept, but how do I access that install
> directory name from my program?

and Rob (Sisyphus) replied:
> The prefix to that directory will be contained in one of the %Config keys -
> I think it's $Config{sitelib}. That being the case, so long as you 'use
>Config;' , you can access the directory as
>$Config{sitelib}/projectname/datafiles/ .


now: I relocated my perl library from system-wide to local, with:
export PERL5LIB=$PERL5LIB:/home/x/lib/perl/lib/perl5/site_perl/

so now the datafiles that interest me are under
/home/x/lib/perl/lib/perl5/site_perl/5.8.8/projectname/...

unfortunately I see that the %Config hash does not hold this directory.
So: what is the most elegant way to find a datafile directory which has
been installed locally?


thanks!

Alessandro Magni

Re: most elegant way to find an installed datafile directory

am 07.07.2006 23:07:03 von unknown

alexxx.magni@gmail.com wrote:

> I continue on an old topic, on which I received some help
> (I cannot find anymore the link to the discussion, sorry):
>
>>....
>>I'm beginning to use MakeMaker and have some problems with it: I need
>>to install some auxiliary data files, and I can't figure out how to tell that to MakeMaker.
>>e.g. I'd like that my final install would include some data files under /etc/projectname/
>>so: 1) where do I put them originally? (in lib/etc for example?)
>>and 2) how do I tell MakeMaker to install them in /etc/projactname ?
>
>
> then:
>
>
>>I correct myself on a point: I just checked that if I put my datafiles
>>in a directory like projectname/lib/datafiles/... they are all
>>installed for good, in my computer under /usr/lib/perl5/site_perl/5.8.6/projectname/datafiles/...
>>This compromise I could accept, but how do I access that install
>>directory name from my program?
>
>
> and Rob (Sisyphus) replied:
>
>>The prefix to that directory will be contained in one of the %Config keys -
>>I think it's $Config{sitelib}. That being the case, so long as you 'use
>>Config;' , you can access the directory as
>>$Config{sitelib}/projectname/datafiles/ .
>
>
>
> now: I relocated my perl library from system-wide to local, with:
> export PERL5LIB=$PERL5LIB:/home/x/lib/perl/lib/perl5/site_perl/
>
> so now the datafiles that interest me are under
> /home/x/lib/perl/lib/perl5/site_perl/5.8.8/projectname/...
>
> unfortunately I see that the %Config hash does not hold this directory.
> So: what is the most elegant way to find a datafile directory which has
> been installed locally?
>
>
> thanks!
>
> Alessandro Magni
>

I do not know about elegance, but if you have a specific module in mind,
you can load it, and then look it up in %INC. I am thinking of something
similar to

use Foo::Bar;
print "Foo::Bar corresponds to $INC{'Foo/Bar.pm'}\n";

The only other thing I can think of offhand is to traverse @INC.

Tom Wyant