Thanks for the replies folk. I appreciate the earlier posts about setting environments either in a wrapper shell or having the Perl script call itself after setting the environment. I use the latter often (in my case to fire off multiple copies of the script with different parameters).
What I'm trying to understand is why the script works on one server but not another and don't really know how to go about finding out what's happening. I know that the issue is with the paths to the Oracle library files but not what the difference is between the two environments. At shell level they look the same and the Perl operates the same.
Is there some setting for cron that has changed between servers? Maybe the parameters I used to build DBD::Oracle were different so the old version doesn't need LD_LIBRARY_PATH? Was there a change in Perl between 5.8 and 5.12 that could have affected this? Difference in the DBD::Oracle module? Difference in the Oracle client? I know there are too many parameters here to get definitive answers but maybe someone knows that in version x of this bit some fix was plopped in to change functionality.
More information - I rebuilt the DBD::Oracle (using -R for runtime pathing) and switching to a user without LD_LIBRARY_PATH set I can see libclntsh.so.10.1 in $ORACLE_HOME but not libnnz10.so. This is from the shell. If I set LD_LIBRARY_PATH I find both libraries. It's the latter library that's failing in cron.