Hmmm, actually, that code looks like it should work. I tested it (substituting "select * from dual" for the SQL and my own database), and it works just fine for me.
in reply to DBI InactiveDestroy problem
The error you are reporting indicates that something in the child process destroyed the statement handle ($csr), not the database handle. You get exactly this sort of error if you try to re-use the database handle in the child process at the same time as you are using it in the parent. If this were a problem with inactive destroy of the database handle, then the error you would get would not be "invalid cursor" but rather "end-of-file on communication channel". If you doubt this, then comment out the setting of InactiveDestroy.
Anyway, I'd look more closely at what you are actually doing in that block of code you allude to as "do something here in child process", as that is almost certainly the actual source of your error (not the database handle DESTROY).
Not an editor command: Wq