Thank you for adding precision to my post!
--Geoff
On Fri, Jun 27, 2008 at 1:20 PM, Ingo Schwarze <[EMAIL PROTECTED]> wrote:
> Hi Geoff,
>
> i like your explanation of the fundamentals of references,
> but near the end, you run the risk of spreading confusion:
>
> Geoff wrote on Thu, Jun 26, 2008 at 10:12:00AM -0400:
>
>> ANOTHER way is to say: %myhash = %$data, and then %myhash
>> becomes the equivalent of the original %hash.
>
> Better say: a shallow copy, not "the equivalent".
>
> Why is this important?
>
> 1. A reference is not a copy.
> After you change the original,
> the reference points to the new value.
>
> $ perl -e '
>> use warnings;
>> use strict;
>> my %orig = ( key => "oldvalue" );
>> my $ref = \%orig;
>> print "at first, ref points to: $ref->{key}\n";
>> $orig{key} = "newvalue";
>> print "after changing orig, ref also points to: $ref->{key}\n";'
> at first, ref points to: oldvalue
> after changing orig, ref also points to: newvalue
>
> 2. Hash assignment does copy.
> When you change the original,
> the copy does not change.
>
> $ perl -e '
>> use warnings;
>> use strict;
>> my %orig = ( key => "oldvalue" );
>> my %copy = %orig;
>> $orig{key} = "newvalue";
>> print "after changing orig, copy still contains: $copy{key}\n";'
> after changing orig, copy still contains: oldvalue
>
> 3. The copy is shallow.
> So, if references are contained,
> they are copied as refernces:
>
> $ perl -e '
>> use warnings;
>> use strict;
>> my $scalar = "oldvalue";
>> my $ref = \$scalar;
>> my %orig = ( key => $ref );
>> print "${$orig{key}}\n"; # caution: not $orig->{key}
>> my %copy = %orig;
>> $scalar = "newvalue";
>> print "${$copy{key}}\n";'
> oldvalue
> newvalue
>
> You need to be very careful what is refernced and what is copied;
> in fact, that's the whole point of references...
> Vague terms like "equivalent" are not helpful,
> and even "assign" may sometimes be confusing.
>
> [...l
>> %anotherhash = %$hashref;
> [...]
>> When you assign %anotherhash to %$hashref,
>
> Well, no. What you are doing here is assigning the contents
> of %$hashref to %anotherhash. Or better, copying the contents
> of %$hashref into %anotherhash.
>
> Yours,
> Ingo
>
> --
> Ingo Schwarze <[EMAIL PROTECTED]> | Software Engineer | Framework Team
> Astaro AG | www.astaro.com | 76227 Karlsruhe | Germany
> _______________________________________________
> ActivePerl mailing list
> [email protected]
> To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
>
--
--Geoff
Cell: (313)506-7295
Sterling Heights CERT
'04 Grand Cherokee | '05 Town & Country
http://www.moparmailinglist.com
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs