DBI::selectall_arrayref kann auch Hashes

Oftmals stand ich vor dem Problem, eine Reihe von Datensätzen mittels DBI „auf einmal“ abzufragen und das Ergebnis praktikabel vorliegen zu haben. „Praktikabel“ heißt für mich, jeder Datensatz als Hashref. Nun benötige ich aber oftmals keine speziellen Index pro Datensatz, wie ihn selectall_hashref aber verlangt. Manchmal gibt es auch schlicht keinen passablen Index. Dafür möchte ich die Ergebnisse vielleicht sortiert beziehen. Bisher habe ich mir mit einer Krücke beholfen, die aus dem Hashref, dessen Values die gewünschten Hashrefs der einzelnen Datensätze sind, ein (sortiertes) Array aus den Datensatz-Hashrefs produzierte. Hat geklappt. War aber nicht elegant.

Elegant ist jetzt aber, dass selectall_arrayref nicht nur die Ergebnisliste so wie mittels ORDER BY angegeben zurückliefert, sondern auch dazu noch die Datensätze nicht zwingend ebenfalls als Arrayref liefern muss, sondern diese auch als Hashref liefern kann. Und so sieht das aus:

my $arrayref =
  $dbh->selectall_arrayref( $statement, { Slice => {} }, @bind );

Data::Dumper zeigt, wie die Struktur dann ausschaut:

$VAR1 = [
          {
            'key1' => 'value1',
            ...
          },
          {
            'key2' => 'value2',
            ...
          },
          ...
        ];

Neat! 🙂