[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Omaha.pm] Class::Date - change once set
Forwarding dLux's message.
j
From: "Balázs Szabó (dLux)" <dlux@dlux.hu>
Date: November 11, 2005 3:06:01 AM CST
To: Jay Hannah <jay@jays.net>
Subject: Re: [Omaha.pm] FW: FW: Class::Date - change once set
Hi,
Jay Hannah wrote:
From: "Balázs Szabó (dLux)" [mailto:dlux@dlux.hu]
use Class::Date qw(date);
$a = date "2000-11-11";
$b = date "1970-10-21";
print "a: $a, b: $b\n";
swap1($a, $b);
print "a: $a, b: $b\n";
sub swap1 {
$x = $_[0];
$_[0] = $_[1];
$_[1] = $x;
}
Ahhh, yes. I misread your email the first time. To make sure I know
what's happening let me walk through it...
Ok.
sub swap1 {
$a is obj in year 2000. $b is obj in year 1970. $_[0] is a ref to $a.
$_[1] is a ref to $b.
Correct.
$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];
$_[0] = $_[1];
$a obj is destroyed. A new $a is created, year 1970. (via clone()
inside Class::Date)
Not correct. Now $a is points to the original $b, while $x keeps the
reference to $a;
$_[1] = $x;
}
$b obj is destroyed. A new $b is created, year 2000. (via clone()
inside Class::Date)
Is that right?
Not correct. $b now points to the $x, which kept the reference to the
original $a, and in the previous step, we saw that $a is now pointing to
the original $b;
Thanks,
j
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.
Regards,
--
Szabó Balázs (dLux)
-- -- - - - -- -