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


in reply to Foreach in a 2D array

Remember that a hash is a datastructure where each element has a *key* and a *value*. Looking at your code I think your intent was to create a hash (%dataoptions) that had one key "Gender", and that key "Gender" having a related value that is an array whose elements are "Male" and "Female".

So, this:

my %dataoptions = ( "Gender", ["Male", "Female"] );
should be this:
my %dataoptions = ( "Gender" => ["Male", "Female"] );
The other thing to remember is that this:
["Male", "Female"]
creates a *reference* to an anonymous array. So in hash %dataoptions, the value corresponding to key "Gender" is a *reference* to an anomyous array containing elements "Male" and "Female". So then when you do
foreach $option ($dataoptions{$columns[$i]})
$option is a *reference* to an array.

I think you want your loop to be something like this:

for ($i = 0; $i < @columns; $i++) { print $columns[$i].': '; my $arrayref = $dataoptions{$columns[$i]}; foreach $option (@$arrayref) { print '<input type="radio" name="'.$columns[$i].'" value="'.$ +option.'"> '.$option.' '; } }
HTH.