Passing undef as the first parameter to bind_columns() is there for backward compatability. I don't trust backwards compatability, having been burned by incomplete backward compatability code a few times. Try removing the undef.
I'm curious about the output you're getting. I don't see where
DBI::st=HASH(0x164ad0)
is getting printed from. Are you showing us the fragment that you're running, or a subset?