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

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

Hi! I need from ...
$dbh->selectall_arrayref( "SELECT ename FROM emp ORDER BY ename", { Slice => {} } );
only a @array as result and not a array_ref. How can I do that ? on Perl DBI Docs ...
my $emps = $dbh->selectall_arrayref( "SELECT ename FROM emp ORDER BY ename", { Slice => {} } ); foreach my $emp ( @$emps ) { print "Employee: $emp->{ename}\n"; }
but i need a alternative with 2 lines :-) Thanks a lot
@array [ value, value2, value3] or $string = "value, value2, value3";

Replies are listed 'Best First'.
Re: $dbh->selectall_arrayref to simple @array
by Corion (Patriarch) on Sep 14, 2011 at 15:01 UTC
Re: $dbh->selectall_arrayref to simple @array
by Juerd (Abbot) on Sep 18, 2011 at 16:04 UTC

    Why do you want an array without a reference? Arrays that are accessed by references can do exactly the same things, only the syntax is a bit different.

    By the way, consider DBIx::Simple, which allows you to do:

    my @emps = $db->query("SELECT ename FROM emp ORDER BY ename")->flat; foreach my $emp (@emps) { ... }
    "flat" means: take all results and return them as one flat list.
Re: $dbh->selectall_arrayref to simple @array
by metaperl (Curate) on Sep 14, 2011 at 18:02 UTC
Re: $dbh->selectall_arrayref to simple @array
by chrestomanci (Priest) on Sep 15, 2011 at 20:17 UTC

    I was puzzling over that today. The issue is that selectall_arra­yref gives you back a reference to an array of arrays, where each row from the query result is put into an array, and references to each of those arrays are put into a higher level array. A reference to that top level array is returned. All this is usefull if you are querying for several collums in each row, but is a useless level of indirection if you are only querying for one.

    The solution I used was to make use of the map function to flatten the data structure. I hope it does not look to much like code golf!

    my @query_results = map { $_->[0] } @{ $sth->fetchall_arrayref() };