文件句柄错误

时间:2011-12-13 21:51:55

标签: perl

我正在尝试打开设备列表文件来运行命令但是收到“未打开的文件句柄”错误。我怎么解决这个问题?错误发生在while (<List>) {行。

#!\usr\bin\Perl\bin\perl

use warnings;
use strict;
use NET::SSH2;
use MIME::Base64;
my $host = "C:/temp/devices.txt"; # input file
my $user = "XXX"; # your account
my $pass = "XXXXX"; # your password  64 bit mime
my $ssh2 = Net::SSH2->new();
my $result = "C:/temp/result1.txt"; # output file
$ssh2->debug(1); # debug on/off
open(List, '<', "$host" ) or die "$!";
           my @lines = <List>;
           for my $line (@lines) {
    $ssh2->connect($line) or die "Unable to connect host $@ \n";
    my $dp=decode_base64("$pass");
    $ssh2->auth_password("$user","$dp");
    my $chan = $ssh2->channel();
    $chan->exec('sh ver');
    my $buflen =30000;
    my $buf1 = '0' x $buflen;
    $chan->read($buf1, $buflen);
    close (LIST);
    #### ## print in file
    open (OUTPUT, '>', "C:/temp/result.txt") or die "$!";
    open (OUTPUT, '>', "$result") or die "$!";
    print OUTPUT "Result For:", "$host\n", $buf1,"\n";
    close (OUTPUT);
}

1 个答案:

答案 0 :(得分:4)

你的List在while循环中是小写的,在其余循环中是大写的LIST。 Perl区分大小写。

对于其余代码,您尝试做的事情并不明显。假设您需要从LIST逐行执行某些操作,请将while循环替换为:

for my $line (@lines) {

然后在您的代码中,无论您需要“当前行”,请使用$line

我不能在这里评论ssh模块的用法;我自己没用过。