the rows method DOES NOT return the number
of rows retrieved by SELECT.
You are advising about reading the DBI docs. But have
you really read them?
rows
Returns the number of rows affected by the last row affecting
command, or -1 if the number of rows is not known or not available.
Generally, you can only rely on a row count after a non-SELECT
execute (for some specific operations like UPDATE and DELETE), or after
fetching all the rows of a SELECT statement.
For SELECT statements, it is generally not possible to know how many
rows will be returned except by fetching them all. Some drivers will
return the number of rows the application has fetched so far, but others
may return -1 until all rows have been fetched. So use of the rows
method or $DBI::rows with SELECT statements is not recommended.