in reply to Help with Net::OpenSSH::Compat::SSH2

On a side note,

use Net::SSH2; eval { require Net::SSH2; }; if ($@) )

Your use statement is equivalent to:

BEGIN { require Net::SSH2; Net::SSH2->import(); }

...which executes at compile time. So your eval() happens after the party is over.