Yes, you were quite right, the reason I needed this order is that I will be displaying the data directly from the database to autogenerate a status report, with little user intervention and with the column order derived from the sql query.
Also, other people are ultimately relying on me to return an array of hash references, so using array ref and converting would be messier.
The solution you suggested worked perfectly, I've implemented the following routine and it works exactly as it should:
sub read_from_db {
my %params = @_;
my $dbh = $params{-dbh} || "";
my $query = $params{-query} || "";
my @results_array;
if ($dbh =~ /DBI/) {
my $sth = $dbh->prepare($query);
my $result = $sth->execute();
while (my $row = $sth->fetchrow_hashref()) {
tie my(%hash_to_return), "Tie::IxHash";
map({$hash_to_return{$_}=$row->{$_}} @{$sth->{NAME}});
my $ref = \%hash_to_return;
push(@results_array, $ref);
}
$sth->finish;
}
return @results_array;
}
So thanks...!