package FixInit; sub import { return if $ENV{FIXINIT_PM}; my $class = shift; my @chk = $^C ? '-c' : (); $ENV{FIXINIT_PM} = 1; my @path; while ( my $dir = shift @_ ) { last if $dir eq "--"; push @path, $dir; } $ENV{LD_LIBRARY_PATH} = join ":", @path; my %env = @_; $ENV{keys %env} = values %env; exec $^X => @chk, $0, @ARGV; die "Could not exec $^X $0: $!"; } 1; __END__ =head1 NAME FixInit - Fix library path and ENV variables and restart program =head1 SYNOPSIS # Before all other use statements use FixInit; # or use FixInit qw(libpath1 libpath2 -- env1 value1 env2 value2); =head1 DESCRIPTION LD_LIBRARY_PATH interferes with the path used when some libraries were compiled. It should only be used as a last resort. Setting LD_LIBRARY_PATH at runtime does no good, as it is already cached by the linker, so we set it, and restart the program with the original arguments. This library should be used before any other libraries to make sure it works correctly. An alternative would be to reset LD_LIBRARY_PATH and any environment variables in a shell wrapper, and then run your program from the wrapper. =cut