in reply to hash and array mismatch
A hash cannot have duplicate keys, whereas an array can. Hence, the key POSITION NAME is given a value of 9. but then 6 lines later on, the value associated with that key gets overwritten with the value 15. And the key RESULT is initially set to the value 10, but the later overwritten with the value 16. And so on for all the other missing values.
What you can do about it depends upon what you want to do with the hash afterwards. It maybe as simple as reversing the keys and values. The line number (position) will always be unique, so you could use that as the key and the text as the value, but that makes it little more useful than the array.
Perhaps what you want is
foreach my $i ( 0..$#data ) { push @{ $dataPos{ $data[$i] } }, $i; print "$data[$i] -- > $i\n"; }
Which will accumulate an array of positions associated with each value. It would dump something like
$VAR1 = { ' TOTAL QUALITY' => [ 8, 14 ], 'RESULT' => [ 10, 16 ], 'CREATOR' => [ 3 ], ' ' => [ 13, 19, 20 ], 'TOTAL QUALITY' => [ 8 ], 'WELL' => [ 0 ], 'SAMPLE ID' => [ 5 ], 'DISPENSATION ORDER' => [ 2 ], 'POSITION NAME' => [ 9, 15 ], 'QUALITY' => [ 11, 17 ], 'DESCRIPTION' => [ 6 ], 'ENTRY ID' => [ 1 ], 'CREATION DATE' => [ 4 ], 'EDITED' => [ 12, 18 ], 'RUN ID AND DATE' => [ 7 ] };
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: hash and array mismatch
by dana (Monk) on May 08, 2007 at 02:10 UTC |