my $exp; foreach (@hosts) { $exp = Expect->spawn("ssh -l $username $_") or die "Cannot spawn ssh: $!\n"; do_exp ($timeout, 'password $', $oldpass); do_exp ($timeout, "$username\]", 'passwd'); do_exp ($timeout, 'password:', $oldpass); do_exp ($timeout, 'password:', $newpass); do_exp ($timeout, 'password:', $newpass); } sub do_exp { my ($_timeout, $_lookfor, $_send) = @_; if ($exp->expect($_timeout, $_lookfor)) { $exp->send($_send); } else { die "Timeout waiting for $_lookfor.\n"; } }