I don't know the cause of your problem, but I've had success with the Solaris/Perl/OracleInstantClient/cron combination by including a BEGIN block in my perl code as below:
BEGIN {
unless (($ENV{BEGIN_BLOCK}) or $^C)
{
$ENV{ORACLE_HOME} = '/usr/local/instantclient';
$ENV{LD_LIBRARY_PATH} = '/lib:/usr/local/instantclient:/usr/local/
+lib';
$ENV{TNS_ADMIN} = '/apps/admin';
$ENV{BEGIN_BLOCK} = 1;
exec 'env',$0,@ARGV;
}
}
Obviously you should set your ORACLE_HOME and LD_LIBRARY_PATH env variables to the correct ones for your installations in the above. Note that the TNS_ADMIN env variable tells you where to look for tnsnames.ora.