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

In playing around with Perl & html forms, I read a form variable from a "textarea" tag and get a hash that has one key and more than one value. How do I separate out the values so I can loop through them later in the program?
This is what Data::Dumper shows me.
$VAR1 = { 'NumbList' => 'one two three ' };
ggg

Replies are listed 'Best First'.
Re: Hash with one key, three values
by pg (Canon) on Nov 14, 2004 at 23:27 UTC
    "I read a form variable from a "textarea" tag and get a hash that has one key and more than one value."

    You misunderstood what you got. That is simply a hash with ONE key-value pair. But the value is ONE multiline string.

    Just split that string on line breaks, that gives you a list of lines, and you can loop through the list.

Re: Hash with one key, three values
by biosysadmin (Deacon) on Nov 14, 2004 at 23:13 UTC
    You want a hash of arrays. Basically, you'll end up with a hash that looks like this:
    $hash = { 'key' => ['one', 'two', 'three'] }
    If you already have the hash that you show above, here's how to make a hash of arrays from your old hash:
    while ( my ($key,$string) = each %oldhash ) { my @elements = split /\s+/, $string; $newhash{$key} = \@elements; } # You can now access data from it like this: # print the first element in the array referred to by $key print $newhash{$key}->[0], "\n"; # print out all of the elements for a given key print "$key: ", join @{$newhash{$key}}, '-', "\n";
    Also, try out Ovid's Data::Dumper::Simple. It's a clever module which prints out data dumps in a more descriptive way. Cheers. :)