http://www.perlmonks.org?node_id=383010


in reply to hash to text

So my question is how to make that output look normal(like what it's supposed to be) ?

What ARE you expecting $h{word2} to contain, [[2,3],3] or [2,3,3] ?

Does this make you any wiser or perhaps you ought to check out the docs?

#!perl -w use strict; my %h = ( word1 =>[2,3], word3 =>[1,2] ); $h{word2} = [ $h{'word1'},3], $h{word4} = [ @{ $h{'word1'} },3], print $h{'word2'}->[0]->[0], "\n"; # Alternative1 print @{ @{ $h{'word2'} }[0] }[0], "\n"; # Alternative1 print @{ $h{'word4'}}[0], "\n"; # Alternative2 print $h{'word4'}->[0], "\n"; # Alternative2 __OUTPUT__ 2 2 2 2

Replies are listed 'Best First'.
Re^2: hash to text
by chiburashka (Initiate) on Aug 14, 2004 at 21:19 UTC
    btw, why when i change the code to :
    my %h = ( word1 =>[2,3], word2 =>[1,3], word3 =>[1,2] ); $h{word1} = [ $h{word2},$h{word3}]; $h{word2} = [ $h{word1},$h{word3}]; $h{word3} = [ $h{word1},$h{word2}]; print @{ @{ $h{'word3'} }[0] }[0], "\n";

    it gives me out the output : ARRAY(0x8064e68)

    And, how can i see this in normal now ?

      Let's look at your code with some hand calculations thrown in for fun.

      #!/usr/bin/perl my %h = ( word1 =>[2,3], word2 =>[1,3], word3 =>[1,2] ); $h{word1} = [ $h{word2},$h{word3}]; # [[1,3],[1,2]] $h{word2} = [ $h{word1},$h{word3}]; # [[[1,3],[1,2]],[1,2]] $h{word3} = [ $h{word1},$h{word2}]; # [[[1,3],[1,2]],[[[1,3],[1,2]],[1 +,2]]] print @{ @{ $h{'word3'} }[0] }[0], "\n";

      If you look at the data above, you'll see that you're dereferencing the structure twice. Well, when looking at the zeroeth element, you'll notice that your print statement above gives a reference to an array, specifically [1,3].

      To print it, you will need to deref it one more time.

      print @{ @{ $h{'word3'} }[0] }[0]->[0], "\n"; # prints "1" print @{ @{ $h{'word3'} }[0] }[0]->[1], "\n"; # prints "3"

      When in doubt, walk through your data by hand; use Data::Dumper; inspect things.

      Hope this helps,

      -v
      "Perl. There is no substitute."
Re^2: hash to text
by chiburashka (Initiate) on Aug 14, 2004 at 20:56 UTC
    it should contain [[2,3],3].