in reply to Re^2: Hashes and String Variables
in thread Arrays and Strings in Hashes

I tried the following. Can you tell me what I am doing wrong here? Thank You.

my @files = qw( http://use.perl.org/ http://search.cpan.org/ http://jobs.perl.org/ ); my @hash = ( url => '', curArray => [], prevArray => [], ); foreach my $url2 ( @files ) { #push (@hash{url}, $url2); $hash{url} = $url2; }

Replies are listed 'Best First'.
Re^4: Hashes and String Variables
by toolic (Bishop) on Jun 14, 2010 at 02:10 UTC
    Can you tell me what I am doing wrong here?
    • You should use strict and warnings because they will give you clues to your problems.
    • $hash{url} = $url2; will keep overwriting the last value of the literal key 'url' inside your for loop.
    • Read perldsc.
    use warnings; use strict; my @files = qw( http://use.perl.org/ http://search.cpan.org/ http://jobs.perl.org/ ); my %hash = ( curArray => [], prevArray => [], ); foreach my $url2 ( @files ) { push @{ $hash{url} }, $url2; } use Data::Dumper; print Dumper(\%hash); __END__ $VAR1 = { 'prevArray' => [], 'curArray' => [], 'url' => [ 'http://use.perl.org/', 'http://search.cpan.org/', 'http://jobs.perl.org/' ] };
      what does the curly braces around the hash do? ie. "@{ $hash{url} }"

      And how come url is not defined in the original hash structure?

      There should only be on url per hash entry entry in array.

      array { $url = "http://perl.org" curArray = [] prevArray = [] }