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,不知道是哪个环节出了问题,请各位老师帮帮忙,指点迷津...... 展开
<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,不知道是哪个环节出了问题,请各位老师帮帮忙,指点迷津...... 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询