I think if you look at the code for Net::FTP, you'll find your answer, as Net::FTP inherits from IO::Socket::INET. As another poster mentioned, you're implementing your subclass as a hash, whereas Net::FTP is implemented as a typeglob. That's what's causing the problem. One of the weaknesses of Perl's OO implementation is that you have to know a class's internal representation in order to inherit from it.
Anyway, look in the code for Net::FTP and see how its constructor works, and implement yours the same way.