Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何搜索字符串并进入睡眠状态?_Perl_Perl Module_Perl Data Structures - Fatal编程技术网

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/)