On Tue, Jun 24, 2003 at 03:42:16PM -0400, Hardy Merrill wrote: > From 'perldoc DBI': > > "fetchrow_array" > @ary = $sth->fetchrow_array; > > An alternative to "fetchrow_arrayref". Fetches the next row of data > and returns it as a list containing the field values. Null fields > are returned as "undef" values in the list. > > Notice that you are accepting the results of $sth->fetchrow_array > into a *scalar* $sr_id - using fetchrow_array that should be > an array. When you use a scalar in list context, the scalar > ends up containing the *number* of array elements.
Don't confuse an array in scalar context with a function call in scalar context. A function call in scalar context could return the number of elements, or the first element, or a ref to an array of elements, or something else; it's up to the author of the function. In this case, the behavior of fetchrow_array() in a scalar context is undefined: If called in a scalar context for a statement handle that has more than one column, it is undefined whether the driver will return the value of the first column or the last. So don't do that. Also, in a scalar context, an undef is returned if there are no more rows or if an error occurred. That undef can't be distinguished from an undef returned because the first field value was NULL. For these reasons you should exercise some caution if you use fetchrow_array in a scalar context. Your advice to the original poster to call fetchrow_array() in a list context instead is right on, of course. Ronald