Perl ожидает, что код не работает для настройки пароля

Я использую Perl, ожидая ввода пароля в интерактивной программе. Perl выводит правильный пароль, но устанавливает его по-другому.

#!/bin/perl

use Expect;

my $hostname = qx! /usr/bin/hostname !;
my $Passwd = `./ensite_passwd solidcore $hostname`;

my $sadminPasswd = quotemeta $Passwd;
chomp $sadminPasswd;
chop $sadminPasswd;

print "password is $sadminPasswd \n\n";

my $sadminPasswd = Expect->spawn("/sbin/sadmin", "passwd")
        or die "Cannot spawn /sbin/sadmin $!\n";

 $sadminPasswd->expect(300,
              [qr/New Password:/ => sub {
                 my $fh = shift;
                 $fh->send("${sadminPasswd}\n");
                 print "sent '${sadminPasswd}'\n";
                 exp_continue;
               }
              ],
              [qr/Retype Password:/ => sub {
                 my $fh = shift;
                 $fh->send("p2c4f8j5\n");
                 #$fh->send("${sadminPasswd}\n");
                 #print "sent '${sadminPasswd}'\n";
                 print "sent 'p2c4f8j5'\n";
               }
              ]);


   $sadminPasswd->soft_close();

Я получаю результат ниже:

swdvssd0046$ sudo perl test.pl
password is p2c4f8j5 

New Password:sent 'Expect=GLOB(0x23ae188)'

Retype Password:sent 'p2c4f8j5'

Passwords do not match.
swdvssd0046$ 

Я вообще не понимаю 'Expect=GLOB(0x23ae188)'. Я знаю, что пароль для этого хоста будет «p2c4f8j5», поэтому я вручную ввел его в код подтверждения пароля. Есть идеи, что мне не хватает?


person user746184    schedule 14.08.2019    source источник


Ответы (1)


использовать предупреждения; ... "моя" переменная $sadminPasswd маскирует предыдущее объявление в той же области

Инструмент спасибо за ответ!

person user746184    schedule 14.08.2019