in reply to Re: Re: passing information into a hash
in thread passing information into a hash

Good question. :) For this particular case, i probably should have used your second snippet (take a reference to the array instead of copying it into a new anonymous one). Consider these:
use Data::Dumper; my @array = qw(foo bar baz); my %hash; for (1..5) { my @array = qw(foo bar baz); $hash{$_} = \@array; undef @array; } print Dumper \%hash; for (1..5) { my @array = qw(foo bar baz); $hash{$_} = [@array]; undef @array; } print Dumper \%hash;
I usually stick with an explicit copy since it tends to keep me out of trouble, but there are times when you do want to take a reference, and you just have to be careful when you do.

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)

Replies are listed 'Best First'.
Re: 3Re: passing information into a hash
by hmerrill (Friar) on Sep 29, 2003 at 17:08 UTC
    I want to be clear about this - I don't quite understand yet. Does @array copy the array and then create an anonymous reference to the new array? Or does it just create a new reference to the existing @array? TIA.

      Don't forget to escape square brackets, the left one is all you really need to worry about: [@array]

      Anyways ... [@array] copies the contents of the array into a new anonymous array reference. I think the name for the collection of those contents is called a list ... so you could say that the l-value of [@array] is an anymous array that contains a copy of @array's list ... i think. Understanding the difference between Perl's lists and arrays can be tricky, and i often get it wrong. :/

      Here is some more code to study:

      #!/usr/bin/perl -l use strict; use warnings; use Data::Dumper; my @array = 0..4; my $ref1 = \@array; my $ref2 = \@array; my $copy1 = [@array]; my $copy2 = [@array]; print Dumper $ref1,$copy1; print for ($ref1,$ref2,$copy1,$copy2); undef @array; print Dumper $ref2,$copy2;

      jeffa

      L-LL-L--L-LL-L--L-LL-L--
      -R--R-RR-R--R-RR-R--R-RR
      B--B--B--B--B--B--B--B--
      H---H---H---H---H---H---
      (the triplet paradiddle with high-hat)