printf - оператор списка; первый printf сожрет все ожидаемые оставшиеся аргументы, как если бы вы сказали:
$exp->expect(30, '-re', "Success",
printf( LOG "Successfully Deleted \n" =>
sub {exp_last;},
'-re',
"ERROR",
printf( LOG "Error in Deletion \n" )
)
);
Таким образом, в случае «Успех» сначала печатается «Ошибка при удалении», а затем «Успешно удалено».
Вы, вероятно, должны иметь вместо:
$exp->expect(30,
'-re', "Success", printf( LOG "Successfully Deleted \n" => sub {exp_last;} ),
'-re', "ERROR", printf( LOG "Error in Deletion \n" ),
);
за исключением того, что нет причин использовать printf вместо print.
ОБНОВЛЕНИЕ: Насколько я понимаю документы Expect, вы не делаете несколько шаблонов вообще, и вы должны это делать:
my $which_pattern = $exp->expect(30, "Success", "ERROR");
if ($which_pattern) {
if ($which_pattern == 1) {
print LOG "Successfully Deleted \n";
}
else {
print LOG "Error in Deletion \n";
}
}
Нет необходимости в -re, если вы не используете шаблоны вместо явных строк; Понятия не имею, чего вы пытались достичь с помощью бита sub {exp_last;}
.