Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks, Please can someone explain how I can store  $thermos $enthalpy and $entropy scalars in a hash, with  $thermos as the key. Each variable has multiple values and i want to be able to pull out the $thermos keys and corresponding values in  $enthalpy and  $entropy. Thanks, i could realy use some hash advice. Would something like this work?
%hash = map { $thermos[$_] => $enthalpy[$_] => $entropy[$_] } 0.. $#th +ermos;

Replies are listed 'Best First'.
Re: hashes ?
by Abigail-II (Bishop) on Feb 26, 2003 at 11:27 UTC
    Hmmm, the code suggests your keys and values are coming from arrays @thermos, @enthalpy and @entropy, but you text speaks of scalars.

    I'll assume you have arrays. What you could do is:

    my %hash = map {$thermos [$_] => [$enthalphy [$_] => $entrypy [$_] +]} 0 .. $#thermos;

    Abigail

      thanks Abigail-II, using your code, how could I access the key-value pairs?? e.g. the enthalpy and entropy value for each thermos key. cheers.
        $hash {$thermos [3]} [0]; # enthalpy for fourth thermos value $hash {$thermos [7]} [1]; # entropy for eigth thermos value.

        Abigail

Re: hashes ?
by tachyon (Chancellor) on Feb 26, 2003 at 13:13 UTC

    While using an array (as suggested by Abigail-II) is far more memory efficient a hash of hashes is a nice structure too. If you were using an array you would just access the elements like $thermos{$i_want}->[0] for the first element. All you need to do is remember if you were putting entropy or enthalpy there. Anyway here is a short hash example. As you can see it is pretty readable as we access the thermos properties by name rather than number. For small arrays of properties an array is fine. As you get more properties a hash is nicer.

    my @thermos = map { "Thermos$_" } 1..10; my @enthalpy = 11..20; my @entropy = 21..30; my %thermos = map { $thermos[$_] => { enthalpy => $enthalpy[$_], entro +py => $entropy[$_] } } 0.. $#thermos; my $i_want = "Thermos3"; if ( exists $thermos{$i_want} ) { print <<STUFF; Thermos: $i_want Enthalpy: $thermos{$i_want}->{enthalpy} Entropy: $thermos{$i_want}->{entropy} STUFF } else { print "Don't have the thermos: $i_want!\n"; } use Data::Dumper; print Dumper \%thermos;

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

      thanks tachyon - you've really helped!