note
spazm
The idiom listed above is slightly flawed, perhaps the behavior of fetchall_arrayref has changed in the last few years?
Original:
<code>
my $rowcache;
while (my $aref = shift(@$rowcache)
|| shift ( @{$rowcache= $sth->fetchall_arrayref(undef, $max_rows)} )
)
</code>
From perldoc DBI:
<code>
Here’s an example (assumes RaiseError is enabled):
my $rows = []; # cache for batches of rows
while( my $row = ( shift(@$rows) || # get row from cache, or reload cache:
shift(@{$rows=$sth->fetchall_arrayref(undef,10_000)||[]}) )
) {
...
}
</code>
The difference being: <code> || [] </code>.
fetchall_arrayref is returning undef instead of an empty arrayref.
<p>
The original code as listed will give an annoying "attempt to use undefined value as an ARRAYREF" style error after processing the last line of sql output.
<p>The error line will be attributed to the last line of the while loop since the error happens in the while loop comparator.
273952
273952