On May 28, 2010, at 9:33 AM, Paul Johnson wrote:

> On Fri, May 28, 2010 at 06:14:38AM -0400, John Scoles wrote:
> 
>> You will have to set those values before your modules load.
>> 
>> So you should stick them in the BEGIN and that should work
> 
> ... except where it doesn't, such as on Solaris for example.  Here,
> LD_LIBRARY_PATH (at least) really does need to be set before the process
> starts.  You can do this by writing a shell wrapper, or re-execing your
> perl script if the value is not already set.
> 
> You're using linux and I'm not sure if this sort of messing about is
> required there.
> 
> 
>> http://www.compuspec.net/reference/language/perl/BEGIN_and_END.shtml
>> 
>> cheers
>> John Scoles
>> 
>> On Fri, May 28, 2010 at 3:45 AM, newbie01 perl 
>> <newbie01.p...@gmail.com>wrote:
>> 
>>> Hi all,
>>> 
>>> Can someone advise how to set LD_LIBRARY_PATH from within the Perl scripts?
>>> 
>>> If I set LD_LIBRARY_PATH from the command line, all is okay
>>> 
>>> [oracle ~]$ perl -e 'use DBD::Oracle; print $DBD::Oracle::VERSION,"\n";'
>>> Can't load
>>> 
>>> '/oracle/product/db/11.1/perl/lib/site_perl/5.8.3/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so'
>>> for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file:
>>> No such file or directory at
>>> /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/DynaLoader.pm line 230.
>>> at -e line 1
>>> Compilation failed in require at -e line 1.
>>> BEGIN failed--compilation aborted at -e line 1.
>>> [oracle ~]$ export LD_LIBRARY_PATH=/oracle/product/db/11.1/lib
>>> [oracle ~]$ perl -e 'use DBD::Oracle; print $DBD::Oracle::VERSION,"\n";'
>>> 1.15
>>> 
>>> But if I do the following instead in the Perl script, it does not work? How
>>> to set the LD_LIBRARY_PATH then?
>>> 
>>> $ENV{ORACLE_HOME}=$ORACLE_HOME;
>>> $ENV{ORACLE_SID}=$ORACLE_SID;
>>> $ENV{PATH}="$ORACLE_HOME/bin:$PATH";
>>> $ENV{LD_LIBRARY_PATH}="$ORACLE_HOME/lib";
>>> 
>>> FYI, the script is to run from a cron which is why am setting
>>> LD_LIBRARY_PATH in the script.
>>> 
>>> Any response will be very much appreciated. Thanks in advance.
>>> 

Have you considered doing a require instead of a use.  With require, the 
loading is done at run time, and would be governed by the setting of 
LD_LIBRARY_PATH, at the time the require statement is executed.  Just set 
LD_LIBRARY_PATH before doing the require.
--Marilyn



--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to