我一直在看我的代码,但我无法弄清楚以下错误在哪里:uninitialized value $match in string eq perl
基本上代码通过TELNET连接到多个设备并关闭连接。它只是测试用户及其密码,以查看哪些已过期。当它连接时给出成功消息,否则给出失败消息。
我不知道为什么它会给我那些未初始化的值错误。这是我用于项目的代码:
$telnet = new Net::Telnet (
Errmode => "return",
Port => $puerto,
Input_log => $output_log,
Host => $host
);
$conexion = $telnet -> open(Timeout => 5);
if ($conexion == 1) {
print "Se conecto al $host \n\n";
$input = $telnet -> get(Timeout => 10);
if ($input) {
if ($input =~ /login name:/){
$cmd = $telnet -> print($user);
($prematch, $match) = $telnet -> waitfor(
Timeout => 5,
Match => '/password:/');
if ($match) {
$cmd = $telnet -> print($password);
($prematch, $match) = $telnet -> waitfor(
Timeout => 5,
Match => '/Windows/');
if ($match) {
$cmd = $telnet -> print("");
($prematch, $match) = $telnet -> waitfor(
Timeout => 5,
Match => '/choose/');
# Aca se tiene que diseñar el caso de errores de clave
//////ERROR LINE//////
if ($match eq "choose") {
//////ERROR LINE//////
$cmd = $telnet -> print("2");
($prematch, $match) = $telnet -> waitfor(
Timeout => 5,
Match => '/Corp/');
if ($match) {
print "Se autentico satisfactoriamente el usuario y la contrasena\n\n";
}
} else {
print "el usuario o contrasena son erroneos, fallo la conexion\n\n";
$cerrar = $telnet -> close;
}
}
}
}
}
}
$cerrar = $telnet -> close;
}
答案 0 :(得分:3)
我在猜测
$telnet->waitfor()
返回了一个空列表undef
值。你看,“未初始化”并不意味着它在其他语言中意味着同样的东西。在为其分配未定义的值之前,您可能在$match
中有了某些内容。对于Perl,无论您是否为该标量定义了值,或者为其指定了未定义的值,都是相同的。
这可能是一些混乱的地方。
Perl中的许多API在列表上下文中失败时返回一个空列表。这样他们的“真值”就是0,你可以这样做:
unless (( $prematch, $match ) = $telnet->waitfor( Timeout => 5, Match => '/choose/' )) {
die 'Failed waiting for Telnet!';
}