El LD_LIBRARY_PATH la variable de entorno debe configurarse antes su programa comienza, antes de perl en sí mismo está cargado. Cambiándolo en BEGIN{} afectará a nuevos programas que inicie, pero no afectará la carga de bibliotecas compartidas — en este caso (aunque nunca he usado DBD::Oracle) estás cargando un Oracle .so en el programa que ya se está ejecutando, por lo que es "demasiado tarde" para cambiar el LD_LIBRARY_PATH . El enlazador dinámico /lib/ld.so (más o menos) se inicia antes de perl , por lo que en el momento en que su secuencia de comandos esté compilada y BEGIN{} se ejecuta, ya está configurado.
podrías intente volver a ejecutar su secuencia de comandos como su propio sucesor o algo así *, pero una breve secuencia de comandos de shell seguramente será la solución más simple:
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib
export ORACLE_SID=prod
exec /usr/local/bin/your-db-program "example@sqldat.com"
*- esto sería un poco loco, pero TIMTOWTDI:
eval {
use DBD::Oracle foo bar baz; …
};
if (example@sqldat.com =~ /install_driver\(Oracle\) failed/) {
$ENV{LD_LIBRARY_PATH} .= ':/usr/lib/oracle/10.2.0.3/client64/lib';
$ENV{ORACLE_SID} = 'prod';
warn "Restarting with LD_LIBRARY_PATH reset:\n\example@sqldat.com\n";
exec { $0 } $0 => @ARGV;
}