If you are running on Solaris (it looks to
me like you are)
LD_LIBRARY_PATH is cached by the linker
when your script is first started. The effect of this
is that any changes made to
LD_LIBRARY_PATH inside your program (even in
a BEGIN block) will not be reflected in how the linker
searches for libraries that need to be dynamically linked.
The only decent solution I ever came up with
was to ensure that LD_LIBRARY_PATH was set before my
perl program was ever started. Not
very elegant; but the problem isn't perl's fault.