in reply to Env Variables

In case the environment variables in question involve LD_LIBRARY_PATH, and in case you're using Apache, see SetEnv/PassEnv.

LD_LIBRARY_PATH is special in that (on some operating systems like Solaris1) it needs to be set before the process is started that would need it for dynamic linking (this is because the runtime linker caches the search paths on exec). That means that simply changing the environment from within the script itself may not work.

In case you do want to set it from within the script (as opposed to having the webserver set it, as suggested above), you'll need to re-exec the script after having changed the environment. This has been discussed a few times here, so you should be able to find related sample code.  Update: see PATH is not setting - PERL, for example.

___

1 as you mentioned crle, I figured you might be on Solaris

Replies are listed 'Best First'.
Re^2: Env Variables
by LinuxUser2008 (Acolyte) on Jun 10, 2010 at 17:04 UTC
    U are like the Sherlock Holmes in Computer Land man .. Awesome... Anyway, Do you know of any other way by which Dynamic Linking Lib paths can be set, other than LD_LIB_PATH and crle??
    Cause among two Solaris boxes, the code executes fine even on the browser, without setting libs using crle..

    Regards,
    Blub:)

      Before trying other things I would try something like:

      #!/usr/bin/perl BEGIN { unless ($ENV{DONE_RESTARTING_MYSELF}) { # avoid endless loop... $ENV{DONE_RESTARTING_MYSELF} = 1; $ENV{ORACLE_HOME} = "/opt/oracle/product/10.2.0/client_1"; $ENV{LD_LIBRARY_PATH} = "/opt/oracle/product/10.2.0/client_1/l +ib32:/usr/local/lib/sprolib:/usr/local/lib:/usr/lib:/usr/openwin/lib: +/usr/dt/lib:/usr/lib:/usr/ucblib"; exec $0, @ARGV; # <--- } } use DBI; # ...

      Or simply use a shell wrapper around your Perl script:

      #!/bin/sh export ORACLE_HOME=/opt/oracle/product/10.2.0/client_1 export LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/client_1/lib32:/usr/ +local/lib/sprolib:/usr/local/lib:/usr/lib:/usr/openwin/lib:/usr/dt/li +b:/usr/lib:/usr/ucblib /path/to/your/script.pl

      As for the ELFCLASS64 error, the reason is that the (64-bit) lib is being found in /opt/oracle/product/10.2.0/client_1/lib, instead of the 32-bit one in the .../lib32 directory that you tried to specify via LD_LIBRARY_PATH — because setting the env variable too late (after exec of perl) doesn't have any effect, as already mentioned.

        Thanks almut, But i did not understand the point of the last line in the BEGIN segment.. Could you please explain that??

        Regards,
        Blub:)