Well, with some more messing around with other options, I've figured out a workaround, regardless. Here's the new SQL:
$sSQL = qq{SELECT distinct(snickname), saccountnum, dtacctcreateddate,
+ nvl(dtacctenableddate-dtacctdisableddate, dtacctdisableddate-sysdate
+) as disableddiff, laccountid, sacctdisabled
FROM $gsAccountTable
WHERE SAPP = '$gsApp' AND SOWNERID = '$sOwnerID' and DTACCTCREATEDDATE
+ IS not NULL and SACCTDISABLED <> 'DELETED'
ORDER BY SACCTDISABLED};
And in this way, I'll always receive a negative if an account's actually disabled. But it bugs me that the NVL didn't appear to be cooperating with a TO_DATE function that was nested using DBI. The SQL works just fine from my database tool (with the same substitutions).