in reply to Duplicate rows with Class::DBI
my %data; my @loop_data = (); ## NOT INCREMENTING PRIMARY KEY, THUS RETURNING THE FIRST ROW *TWICE* for (@info) { $data{author} = $_->author; $data{content} = $_->content; $data{title} = $_->title; $data{id} = $_->id; $data{date} = $_->date; push @loop_data, \%data; }
Your hash, %data, is defined outside the lexical block of the for-loop. At the end of the for-loop, you push a reference to %data onto @loop_data. The problem is that the next time through the loop, you modify the same %data, which is already being referenced by $loop_data[0], and push another reference to the same hash onto $loop_data[1]. Thus every element of @loop_data will be pointing to the same hash. You can fix this easily by declaring your %data hash inside the lexical block of your loop, so a new one gets created every time through the loop.
my @loop_data; for (@info) { my %data; $data{author} = $_->author; $data{content} = $_->content; $data{title} = $_->title; $data{id} = $_->id; $data{date} = $_->date; push @loop_data, \%data; }
Update: Formatting errors.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Duplicate rows with Class::DBI
by stonecolddevin (Parson) on Apr 25, 2005 at 23:13 UTC | |
|
Re^2: Duplicate rows with Class::DBI
by eibwen (Friar) on Apr 26, 2005 at 00:37 UTC | |
by friedo (Prior) on Apr 26, 2005 at 02:53 UTC |