http://qs321.pair.com?node_id=11114419

Skeeve has asked for the wisdom of the Perl Monks concerning the following question:

I just discovered SQL::Abstract because it's used by Mojo::PG

In SQL::Abstract you can write an insert command like this:

my $sql= new SQL::Abstract( array_datatypes => 1 ); my $required = { a => [1, 3, 5], b => [2, 4, 6],}; my($stmt, @bind)= $sql->insert( testtable => $required );

This will be created:

stmt: "INSERT INTO testtable ( a, b) VALUES ( ?, ? )" @bind: ( [ 1, 3, 5 ], [ 2, 4, 6 ] );

I receive JSON data in my script and so my data is like this:

my $data = [ {a => 1, b => 2}, {a => 3, b => 4}, {a => 5, b => 6}, ];

I'm wondering whether or not there is something which would give me the required hash of arrays from my existing array of hashes.

My lengthy attempt is like this:

# %columns will become the hash of arrays my %columns; # Foreach row of data collect its keys and create an empty array in %c +olumns $columns{$_} //= [] foreach map { keys %$_ } @$data; # Then, for each row foreach my $row ( @$data ) { # push the value foreach column push @{$columns{$_}}, $row->{$_} foreach keys %columns; }

Is there a better way to achieve this transposition?


s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
+.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e