On Tuesday 15 May 2007 2:50 pm, Dave Rolsky wrote:
> If the object has overloading, we want to use overload::StrVal instead of
> risking letting the object's stringification overloading kick in. That
> _is_ the problem you're seeing, somehow the overloading kicks in and
> throws an exception.
In the interest of explaining this, I investigated a little more, and I
thought I'd report it in case anyone cares to know.
I used Devel::Peek to examine the CDBI object before and after deletion, and I
think I understand now. The CDBI delete method, after deleting the object's
data from the DB, does this to the object's reference:
undef %$self;
bless $self, 'Class::DBI::Object::Has::Been::Deleted';
So although the underlying hash gets undef'ed, the reference is still intact,
with its internal OVERLOAD flag still set. But since it's now blessed into a
different (nonexistent) class, there's no overloaded operator hash, and the
stringify fails.
I discovered that this bogus object also causes overload::StrVal to fail in
overload 1.01 (perl 5.8.5). In overload 1.03 (perl 5.8.7) the StrVal method
is written differently and doesn't fail.
Again, thanks for the help.
-Charlie
--
Charlie Katz
Harvard-Smithsonian Center for Astrophysics
[EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Mason-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users