$ENV{LD_LIBRARY_PATH} from your shell to point to the right place. But this is a bother, and not to mention really hard to do if you need some dynamic bits to figure out what the right path is.
LD_LIBRARY_PATH and have it be respected by the system's loader. It has to be done by the calling process (in most cases the shell).
LD_LIBRARY_PATH by relaunching the same program with the same arguments as a new sub-process. Simply put a BEGIN block like this in your script:BEGIN {
if(! $ENV{LD_LIBRARY_PATH} ) {
$ENV{LD_LIBRARY_PATH} = join(':', @some_paths_I_need);
my $self_cmd = "$^X $0 " . join(' ', @ARGV);
system($self_cmd);
exit;
}
}
system(LIST) (Score:1)
hdp.
Re: (Score:1)
Might? With that broken
joinI’d say it’s a certainty that at some point the shell will hose him. Plus it’s less and simpler code:Also: why
system(...); exitand notexec?Re: (Score:1)
Also, I didn't use exec because I didn't know how the security restrictions around LD_LIBRARY_PATH were enforced. Using exec means the process continues to have the same pid, system gives me an entirely new process. I wasn't sure if having the same pid would allow me to do what I wanted to do.
But thanks for the clarification. It works correctly (at least on the Linux machine I tried it on).
Re: (Score:1)
Because you’re not shell-quoting anything. If there happens to be any space in there, the new copy of the script will have different
@ARGVcontents. That’s before we even get to other shell meta-characters.Re: (Score:1)