in reply to Re^2: Recursive dbh executions
in thread Recursive dbh executions

The statement handle is still open in your snippet, isn't it?
If I understand what I think you mean: No, putting it in a for means all the rows have been fetched before the loop body starts execution.

If you're really going to fix this, note that the statement doesn't change across calls, only the bound value. I'd rewrite it like this:

my $sth = $dbh->prepare(<<_EOSQL); select obj_id, type from table where parent_id = ? _EOSQL sub GetChildren { my ($objid) = @_; for my $row (@{$dbh->selectall_arrayref, undef, $objid)}) { if ($row->[1] eq 'Container') { GetChildren($row->[0]); } else { # whatever } } }
But as to why the OP's using recursion: I agree with you that it seems unnecessary. It may even be fixable in the SQL, but not knowing enough about the problem and the database, I can't tell.

Your point about assignment and equality confusion is well-taken. Another reason to use warnings, which will complain about "assignment in conditional".