cmd命令行执行perl命令解析文本,无法进入foreach循环体.请问怎么解决?

我写了一个简单的perl,解析三行文本,<Sysname>displaypowerPower1State:NormalPower2State:Normal判断如果最后两行... 我写了一个简单的perl,解析三行文本,
<Sysname> display power
Power 1 State: Normal
Power 2 State: Normal
判断如果最后两行的末尾如果不是" Normal",就输出"ALARM"字样.
我在本机F盘目录下新建了一个display_power.pl脚本文件,文件里面的内容如下:

#!/usr/bin/perl

use strict;

use Data::Dumper;

my $Cur_Version="V1.0.0";

########################################################################

#author:liju

#date:2014-05-08

#华三设备 display power

########################################################################

# print "Usage :

# Version :$Cur_Version

# Test ENV.\n";

# $ENV{'result'}="<Sysname> display power

# Power 1 State: ALARM

# Power 2 State: Normal";

my $result=$ENV{'result'}; #$ENV{'result'} 保存指令返回结果

#**********************************对返回结果进行解析***************************

my @Results = split(/\n/,$result,0);

my $ret_value = "";

my $flag = -1;

my $value1 = "";

my $value2 = "";

my $data1 = "";

my $data2 = "";

my $ret_flag = "NORMAL";

my $ret_flag1="NORMAL1";

foreach my $line(@Results){

print("$ret_flag1");

if($line =~ /^\s*(Power\s*1\s*State\s*):\s*(\S+)\s*.*/){

$value1 = $1;

$data1 = $2;

}

if($line =~ /^\s*(Power\s*2\s*State\s*):\s*(\S+)\s*.*/ ){

$value2 = $1;

$data2 =$2;

}

if($data1 ne ""){

if($data1 ne "NORMAL"){

$ret_flag = "ALARM";

}

}

if($data2 ne ""){

if($data2 ne "NORMAL"){

$ret_flag = "ALARM";

}

}

}

$ret_value = "$ret_flag,POWER,$value1,$data1,$value2,$data2\n";

print "$ret_value";

在windows的cmd命令行跳转到文件所在目录,执行命令:perl display_power.pl
打印结果是:NORMAL,POWER,,,,
foreach循环体里面的print("$ret_flag1");没有执行打印,也就是没有进入到foreach循环体里面.
本人刚学用perl,不知道是哪个环节出了问题,请各位老师帮帮忙,指点迷津......
展开
 我来答
百度网友c9e795dda
推荐于2017-10-14 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1154万
展开全部

兄弟, 这里有 2 个问题

  1. #!/usr/bin/perl; # 可以不要. 这个在 windows 里面大概是没用的(除非你写 cgi), 然而也不是这样用的

  2. # $ENV{'result'}="<Sysname> display power
     # Power  1 State: ALARM
     # Power  2 State: Normal";

    你将这几行都变成注解了, 你自然没有 data 去 read

黑暗中的剑
2014-05-09 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:101万
展开全部
1 my @Results = split(/\n/,$result,0);有问题

2 print("$ret_flag1"); 可以执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式