在第15行使用未初始化的值$ stdout1

时间:2015-02-16 13:53:39

标签: perl

此脚本用于连接到交换机并打印其vlan列表,但输出为:

Use of uninitialized value $stdout1 at line 15

#! /usr/bin/perl 
use strict;
use warnings;
use Net::SSH::Perl;
no strict;
my $host     = "10.220.15.24";
my $user     = "admin";
my $password = "admin";
my $ssh      = Net::SSH::Perl->new($host);
$ssh->login( $user, $password );
print "check the version of the build \n";
print "enter the config mode \n";
print " ahmed ";
my ($stdout1) = $ssh->cmd("show vlan");
print $stdout1 ;

2 个答案:

答案 0 :(得分:4)

写作perl的规则1。 use strict; use warnings;

使用no strict再次关闭它不算数!

但即使启用了strict,我也无法复制您的问题。我能想到的是Net::SSH::Perl cmd函数没有返回结果。

您可能需要更明确地检查它:

my ($result, $errors, $exitcode ) = $ssh->cmd("show vlan");
print "$exitcode $errors\n";
print "$result\n";

我猜你的连接出了问题(密码可能无效?)

答案 1 :(得分:2)

您关闭了strict?为什么?如果遇到问题,请解决问题,不要忽视它。

  • 您需要检查各种命令的返回值。 ssh->login有效吗? Net::SSH::Perl->new了吗?使用or die验证他们确实返回了某些内容。
  • 阅读文档。 ssh-cmd返回三个成员数组:
    • STDOUT
    • STDERR
    • 退出状态。

注意在这个程序中,我检查每个方法返回Net::SSH::Perl类。

#! /usr/bin/env perl 
use strict;
use warnings;
use feature qw(say);   # Replaces 'print' with 'say'

use Net::SSH::Perl;

use constant {
    HOST        => '10.220.15.24',
    USER        => 'admin',
    PASSWORD    => 'admin',
};

my $ssh  = Net::SSH::Perl->new( HOST ) 
    or die qq(Can't SSH to host.);

$ssh->login( USER, PASSWORD );
    or die qq(Can't log into host.);

say "check the version of the build";
say "enter the config mode";
say " ahmed ";
my ( $stdout, $stderr, $exit_code ) = $ssh->cmd("show vlan")
    or die qq(Can't execute command.);
if ( $exit_code ) {
    say "Command returned an exit code of $exit_code"
}
say $stdout;

您还可以在创建debug对象时传递$ssh选项:

my $ssh = Net::SSH::Perl->new( HOST, { debug => 1 } );

这可能会为您提供更多有关正在发生的事情的线索。