使用expect过程中的一点问题

这是我在网上找的一个自动ssh的实例,其中有些地方看不太明白:
第一个是sub创建子例程的话,如果不加函数名,那么默认创建的是什么变量?就是代码中sub {}那一段;第二个就是其中my $self = shift;这里有什么用?取参数吗?主要就是这2处不太懂。
#!/usr/bin/perl
use Expect;
$Expect::Log_Stdout = 1;

$ENV{TERM} = "vt100";

my ($host,$pass) = ("host","passwd");
my $exp = Expect->new;
$exp = Expect->spawn("ssh -l root $host");
$exp->log_file("output.log", "w");
$exp->expect(2,[
                    qr/password:/i,
                    sub {
                            my $self = shift ;
                            $self->send("$pass\n");
                            exp_continue;

                        }
                ],
                [
                    'connecting (yes/no)',                             
                    sub {
                            my $self = shift ;
                            $self->send("yes\n");
                         }
                ]
            );
#$exp->interact() if ($exp->expect(undef,'#'));
$exp->send("uptime\n") if ($exp->expect(undef,'#'));
$exp->send("exit\n") if ($exp->expect(undef,'#'));
$exp->log_file(undef);

作者: lynncate   发布时间: 2011-05-11

2取第一个参数
1匿名函数 应该木有名儿吧

作者: lkk2003rty   发布时间: 2011-05-11

可是这里应该没有参数传进来吧?

作者: lynncate   发布时间: 2011-05-11