嵌套while循环未执行

时间:2011-04-20 17:43:19

标签: perl debugging loops

我有以下代码,唯一的问题是当代码到达嵌套的while循环时它会跳过它,我假设条件没有得到满足,但是有人能看到我做错了吗?我已经验证了我给脚本的所有标志都是正确的,并且job_name是我认为它应该是。

open $alOut,
     "/home/usr/bin/test.pl -j EW-% -j RA-% -l 0 | grep `date \"+%m/%d/%Y\"` | sort -k 3,3|";
while (<$alOut>) {
    chomp;
    my ($job_name, $date, $start_time, $end_time, $duration,
        $state, $return, $expected_end_time) = split(/\s+/, $_);

    # Go to next iteration if jobname is EW-INTERNAL-AUTOSYS,
    # EW-INTERNAL-DB-LONGQUERY-ALERT, EW-INTERNAL-DB-LONGQUERY-ALERT,
    # EW-CIIM-ADJ-TRIGGER, or EW-S140-ADJ-TRIGGER
    if (($job_name eq "EW-INTERNAL-AUTOSYS") ||
        ($job_name eq "EW-INTERNAL-DB-LONGQUERY-ALERT") ||
        ($job_name eq "EW-INTERNAL-SYSUP") ||
        ($job_name eq "EW-CIIM-ADJ-TRIGGER") ||
        ($job_name eq "EW-S140-ADJ-TRIGGER"))
        {
            next;
        }

    #Expected Start Time
    open $alOut2,
         "/home/usr/bin/test.pl -j $job_name -q -l 0 | grep -E `condition:|start_times:`";
    while (<$alOut2>) { .... }
}

2 个答案:

答案 0 :(得分:5)

您应该检查来自open的错误:

open $fh, ... or die "Can't open: $!";

在这个grep中:

grep `condition:|start_times:`

你可能想要常规的单引号('),而不是反引号,shell会尝试运行一个名为condition:的命令。而且我认为你错过了该命令的最终|

答案 1 :(得分:3)

您应该始终检查open返回的值:

open "...whatever..." or die "Can't open: $!";

这可能会告诉你所有你需要知道的事情,但是随便,我可以看到两个问题:

  1. 第二次打开不会被|字符终止。
  2. grep之后的反引号应该是撇号。
相关问题