[Omaha.pm] Fwd: Class::Date - change once set

Jay Hannah jay at jays.net
Fri Nov 11 10:11:44 PST 2005


dLux's response.

j

---
From: "Balázs Szabó (dLux)" <dlux at dlux.hu>
Date: November 11, 2005 9:25:23 AM CST
To: Jay Hannah <jay at jays.net>
Subject: Re: [Omaha.pm] Class::Date - change once set

Hi,

Jay Hannah wrote:

> On Nov 11, 2005, at 3:06 AM, Balázs Szabó (dLux) wrote:
>
>>>>    $x = $_[0];
>>>
>>>
>>> $x is created, a new obj in year 2000.  (via clone() inside
>>> Class::Date)
>>
>>
>> Not correct.  $_[0] is always points to the same object as $a, $_[1]
>> always points to the same object as $b; In this case, we have a new
>> object, $x, which is also points to the same as $a and $_[0];
>
>
> Oh. At a glance inside the guts of your class and not knowing
> "overload" well I thought Class::Date was doing operator overloading
> on the assignment operator (=), invoking clone().
>
> Now I've read up a little (perldoc overload) and may understand your
> guts better. Your explanation above explains that the assigment above
> is a vanilla Perl reference assignment, not some deep overloaded 
> magic...
>
> This part of "perldoc overload" wigs me out:
>
>> SPECIAL SYMBOLS FOR "use overload"
>>
>> ...
>>
>>        Copy Constructor
>>
>>        The value for "=" is a reference to a function with three
>> arguments,
>>        i.e., it looks like the other values in "use overload".
>> However, it
>>        does not overload the Perl assignment operator. This would go
>> against
>>        Camel hair.
>
>
> "would go against camel hair?" lol! Jay swoons w/ bemused
> incomprehension. I thought NOTHING was sacred inside overload. -laugh-
>
> Debugging your class objects always trips me up because of your (very
> useful)
>
>> use overload
>>   '""'     => "string",
>
>
> I'm used to debugging and seeing this:
>
>   DB<1> p $x
> main=HASH(0x8d3a28)
>
> But on your objects I get this:
>
>   DB<2> p $a
> 2000-11-11 00:00:00

>
> So when I'm trying to understand what happens during/after an
> assignment operation I fail. -grin-  Now that I know there's no magic
> going on I can understand it, but I won't know for sure when I'm
> looking at it in the debugger.
>
> Is there any way to get the "main=HASH(0x8d3a28)" to kick out on your
> objects? (So I can SEEE if its the same obj or some new one?)

Hmmm...

Probably you can override the overloading while you are debugging:

package Class::Date
no overload '""';
package main;

I have not tried, but it should work.

>> So, it does not copy OBJECTS, it just increasing and decreasing
>> reference counters to objects (since perl is a reference-counting
>> language).
>>
>> Please see the perlobj and perlref (or perlreftut) manual to get what 
>> I
>> had talked about.
>
>
> Yes. I understand that default behavior. I thought Class::Date was
> being sneakier than the default.

noooo. :-)

>
> Thanks again for the help, you mad scientist genius you,  -grin-
>
Oh!
Your welcome! :-)

> j
>
>

-- 

Szabó Balázs (dLux)
--   --  - - - -- -




More information about the Omaha-pm mailing list