Perl 如何搜索字符串并进入睡眠状态?
我在日志文件Perl 如何搜索字符串并进入睡眠状态?,perl,perl-module,perl-data-structures,Perl,Perl Module,Perl Data Structures,我在日志文件ActivateJob和GetJOBStatus中有两个测试用例,如下所示 我的Perl脚本当前将PASS设置为默认值,并在下面的测试用例中搜索Error 如果发现错误,则将测试用例标记为FAIL 对于GetJOBStatus测试用例,如果处于活动状态脚本必须休眠几分钟,并且必须再次执行GetJOBStatus,如果成功,则必须通过测试用例,否则将失败 我尝试过添加睡眠几秒钟,然后再次调用脚本,但这不起作用 请帮我找出正确的逻辑 日志文件 foreach (@raw_data) {
ActivateJob
和GetJOBStatus
中有两个测试用例,如下所示
我的Perl脚本当前将PASS
设置为默认值,并在下面的测试用例中搜索Error
如果发现错误,则将测试用例标记为FAIL
对于GetJOBStatus
测试用例,如果处于活动状态
脚本必须休眠几分钟,并且必须再次执行GetJOBStatus
,如果成功,则必须通过测试用例,否则将失败
我尝试过添加睡眠几秒钟,然后再次调用脚本,但这不起作用
请帮我找出正确的逻辑
日志文件
foreach (@raw_data) {
if ($raw_data[$count] =~ /Date/) {
@dur = split(/:/, $raw_data[$count]);
$durtime = "$dur[1]" . ":" . "$dur[2]" . ":$dur[3]";
@dur = split(/,/, $durtime);
$startlocaltime = $dur[1];
$starttime = str2time($dur[1]);
# $starttime=10000;
$count++;
$status = "PASS";
if ($raw_data[$count] =~ /Command/) {
@cmdsyntax = split(/:/, $raw_data[$count]);
$cmdcount++;
#Splitting Command name
@cmdname = split(/\(/, $cmdsyntax[1]);
$cmdlog = $cmdsyntax[1] . "\n";
$count += 2;
#Parsing for command output
while ($raw_data[$count] =~ /[COMPLETED]/) {
#Checking status of commmand
if ($raw_data[$count] =~ /Error/i) {
$status = "FAIL";
}
if ($raw_data[$count] =~ s/\"/\'/g) {
$raw_data[$count] = $raw_data[$count];
}
if ($raw_data[$count] =~ s/&/ /g) {
$raw_data[$count] = $raw_data[$count];
}
#Forming comandlog
$cmdlog .= $raw_data[$count] . "\n";
$count++;
}
#Changes Added
my $xyz = "false";
if ($raw_data[$count] =~ /^GetFTSJOBStatusResult/) {
my $xyz = "true";
next;
}
if ($xyz =~ /true/) {
if ($line =~ /.*,([A-Za-z]*),.*/) {
$status = $1;
if ($status = ~/ACTIVE/) {
sleep(1000);
system("/bin/sh /tmp/uday/cliTestExecution1.sh 135.250.70.161 alcatel Linux1.* 11.54");
goto START;
}
}
}
#Changes ends
$cmdlog .= $raw_data[$count] . "\n";
$count++;
}
不是正则表达式检查,空格在错误的位置。如果没有严格或警告,它可能会将“~/ACTIVE/”视为一个空字字符串,然后将其分配给$status
不是正则表达式检查,空格在错误的位置。如果没有严格或警告,它可能会将“~/ACTIVE/”视为一个空字字符串,然后将其分配给$status。Goto?认真地请使用一些子程序或类或其他任何东西。我建议先投资一个空格键。我已经尝试整理您的Perl代码,使其更具可读性,但它仍然是一个可怕的语言示例。我确信您没有
使用严格的
和使用警告
。尽可能地提出你的问题是礼貌的,我可以看出你在这里的时间很少。我并不奇怪你看不到如何让你的代码在这样的布局下工作:我也不能。Goto?认真地请使用一些子程序或类或其他任何东西。我建议先投资一个空格键。我已经尝试整理您的Perl代码,使其更具可读性,但它仍然是一个可怕的语言示例。我确信您没有使用严格的
和使用警告
。尽可能地提出你的问题是礼貌的,我可以看出你在这里的时间很少。我并不奇怪你看不到如何让你的代码在这样的布局下工作:我也看不到。不,这不会是一个空话。相反,regex/ACTIVE/
将与$\uuuu
变量匹配,~
是按位求反。该正则表达式的结果是布尔值1/0,因此$status
的值将是MAXINT
或MAXINT-1
。尽管如此,还是要感谢你指出这个严重错误@阿蒙:你为什么说“那个正则表达式的结果是布尔1/0”?它只是false,因为$\uu
未定义且计算结果为空字符串。~
运算符将其视为零并返回0xFFFFFFFF
@Borodin 1<代码>$\u可能未定义;我们处于一个foreach
-循环中,没有显式的循环变量。2.就我所见,标量上下文中正则表达式的结果是成功的1
,否则为Perl的假值(IV=0,NV=0,PV=”“)。二进制否定更喜欢标量的IV解释,无论哪种方式都会产生非常大的数,这总是正确的。因此,if(…)
总是true@amon:啊,我明白了。您的意思是“该正则表达式的结果是布尔值1或0”。从目前的情况看,它是除法1/0
的结果,您似乎(也是错误地)说它被评估为MAXINT
。不,它不会是一个空话。相反,regex/ACTIVE/
将与$\uuuu
变量匹配,~
是按位求反。该正则表达式的结果是布尔值1/0,因此$status
的值将是MAXINT
或MAXINT-1
。尽管如此,还是要感谢你指出这个严重错误@阿蒙:你为什么说“那个正则表达式的结果是布尔1/0”?它只是false,因为$\uu
未定义且计算结果为空字符串。~
运算符将其视为零并返回0xFFFFFFFF
@Borodin 1<代码>$\u可能未定义;我们处于一个foreach
-循环中,没有显式的循环变量。2.就我所见,标量上下文中正则表达式的结果是成功的1
,否则为Perl的假值(IV=0,NV=0,PV=”“)。二进制否定更喜欢标量的IV解释,无论哪种方式都会产生非常大的数,这总是正确的。因此,if(…)
总是true@amon:啊,我明白了。您的意思是“该正则表达式的结果是布尔值1或0”。按目前的情况看,它是除法1/0
的结果,您似乎也错误地说,它被评估为MAXINT
。
Date and Time is:Thu, 20-06-2013 06:04:19
Line 4 Command:ActivateJob(Job=Test_Abort_New1);
Answer:
ActivateFTSJobResult = Success
COMPLETED
Date and Time is:Thu, 20-06-2013 06:04:19
Line 5 Command:GetJOBStatus(Job=Test_Abort_New1);
Answer:
GetJOBStatusResult = NELabel,Status,ErrorReason,Progress,CurrentUnit,Total
TSS_320_1,ACTIVE,No Error,0,BACKUP.DSC,0
COMPLETED
if ($status = ~/ACTIVE/)