6. Expect - basics (more)

Example 1. Same SSH connection just with more expect-ations ;)

      #!/usr/bin/perl -w
      use strict;
      use Expect;

      my $timeout = 5;
      my $spawn;
      my $ssh = Expect->new();
      $ssh->spawn("ssh root\@127.0.0.1") or die "Can not spawn ssh: $!\n";
      $ssh->expect($timeout,
	     [
	      '-re', '\(yes\/no\)\?\s',
	      sub {
		$spawn = 1;
		my $fh = shift;
		$fh->send("yes\r");
		exp_continue;
	      }
	     ],
	     [
	      '-re', 'password:\s',
	      sub {
		my $fh = shift;
		$fh->send("password\r");
	      }
	     ],
	     [
	      eof =>
	      sub {
		if ($spawn) {
		  warn "EOF while login.\n";
		} else {
		  warn "EOF while spawning ssh.\n";
		}
	      }
	     ],
	     [
	      timeout =>
	      sub {
		if ($spawn) {
		  warn "No prompt.\n";
		} else {
		  warn "Can't spawn ssh\n";
		}
	      }
	     ],
	     '-re', '\[root\sprompt\]#\s',
	    ) or
         die "Expect failed at: ".$ssh->exp_error()."\n";
     $ssh->interact();