LD_LIBRARY_PATH
पर्यावरण चर को पहले . सेट करना होगा आपका प्रोग्राम शुरू होता है — perl
. से पहले खुद लोड है। इसे BEGIN{}
में बदलना नए कार्यक्रमों को प्रभावित करेगा जिसे आप प्रारंभ करते हैं, लेकिन यह साझा पुस्तकालयों . के लोड होने को प्रभावित नहीं करेगा — इस मामले में (हालांकि मैंने कभी भी DBD::Oracle का उपयोग नहीं किया है) आप एक Oracle .so
लोड कर रहे हैं पहले से चल रहे प्रोग्राम में, इसलिए LD_LIBRARY_PATH
को बदलने में "बहुत देर हो चुकी है" . डायनेमिक लिंकर /lib/ld.so
(या तो) perl
. से पहले शुरू किया गया है , इसलिए जब तक आपकी स्क्रिप्ट संकलित हो जाती है और BEGIN{}
चलता है, यह पहले से ही सेट है।
आप कर सकते थे अपनी स्क्रिप्ट को अपने उत्तराधिकारी या कुछ * के रूप में फिर से निष्पादित करने का प्रयास करें, लेकिन एक छोटी शेल स्क्रिप्ट लगभग निश्चित रूप से सबसे सरल समाधान होने जा रही है:
#!/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 "[email protected]"
*- यह थोड़े पागल होगा, लेकिन TIMTOWTDI:
eval {
use DBD::Oracle foo bar baz; …
};
if ([email protected] =~ /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\[email protected]\n";
exec { $0 } $0 => @ARGV;
}