Do the passwords have the same special characters on the different machines. Some "special" characters are treated differently inside double quotes. To avoid that use single quotes.
$ssh->send( 'rootpasswordwithspecialcharacters' . "\n" );
The single quotes are used to protect that characters in the root password. The newline is then concatenated to the end, since \n depends on being in double quotes.
Please follow up on the new thread you started. See my response at Re: How do I get expect.pm to ignore special characters?