The docs I have for DBI don't mention this ability to pass in a prepared statement handle. They all say selectrow_array($statement... not selectrow_array($sth...). Perhaps I'm missing something. It is odd that it segfaults, and all, but this is undocumented behaviour.