If I were you, I'd modify the arrayref sub and not throw away the return value. It's hard to say what kind of optimizing Perl does with fetchrow_arrayref() in void context:
while (my $arr_ref = $sth->fetchrow_arrayref(\@result)) {}
For what it's worth, www.perl.com has a recent article about various tricks to make it easier to use DBI.
Comment on Re: benchmarking DBI bind columns vs. fetchrow_arrayref