Problem with that is that NULL ( =undef() ) lacks even quasi-tautology as a test for mechanistic failure. I'd be inclined to keep the return value strictly for that and use references or instance subvariables to pass the actual database values between routines.
DBI (to the extent I use it) sticks to these basic principles. If another required module doesn't, I'd use inheritance into a fairly trivial class that performs the separation between value logic and mechanistic logic for any "misbehaving" methods, rather than look for a way to do that throughout my higher level code.