in reply to Help with Hash or Arrays

Using a HOH (Hash-of-hashes) would make this program easier to read and maintain.

The code below is a guess at what you want to do - I have added parameters I feel would be necessary for your DB handling.

use strict; use warnings; my %people; my @sentences = ("here i am","i am me"); # Create $people{me} - it contains a HASH-REFERENCE $people{me} = {ROW=>0, DOB=>1985, SPEAK=>[@sentences], # This element is an array-reference, crea +ted from a copy of the array @sentences }; @sentences = ("there she is"); $people{friend} = {ROW=> 1, DOB=> "1984", SPEAK=>[@sentences] # }; foreach my $person (sort keys %people) # Use the KEYS function to get + hash keys, then sort them { addDOBToDatabase( $people{$person}->{ROW}, $person, $people{$person} +->{DOB}); my $sentenceRow = 0; foreach my $sentence ( @{ $people{$person}->{SPEAK} }) # Walk throug +h each element of the array-reference { $sentenceRow++; addSentenceToDatabase( $sentenceRow, $people{$person}->{ROW}, $ +sentence); } }
You need to understand hashes, and references, to follow this code.

     Theory is when you know something, but it doesn't work.
    Practice is when something works, but you don't know why it works.
    Programmers combine Theory and Practice: Nothing works and they don't know why.         -Anonymous

Replies are listed 'Best First'.
Re^2: Help with Hash or Arrays
by Anonymous Monk on Dec 22, 2009 at 22:56 UTC
    With help from Data::Dumper and perltidy, here is how you would normally write that
    my %people = ( 'friend' => { 'SPEAK' => [ 'there she is' ], 'DOB' => '1984', 'ROW' => 1 }, 'me' => { 'SPEAK' => [ 'here i am', 'i am me' ], 'DOB' => 1985, 'ROW' => 0 } );