首页 > 解决方案 > Perl 脚本中的意外相等

问题描述

在我的 Perl 子例程中有一个似乎相等但不应该相等的相等。我怀疑对此有一个简单的答案,但我是 Perl 的新手,可能做了一些我不完全理解的事情。您可以想象,Perl 代码比我粘贴的要多,但我认为下面的代码片段应该足以回答。

sub getJobStatus 
{
    my $ftps = shift;
    my $job_name = trim(shift);
    LogMessage("**********************************************************************\n");
    LogMessage("Getting JES status for job ${job_name}\n");
    LogMessage("**********************************************************************\n");

    # Note: the dir() method does not seem to listen to the supplied argument, and 
    # so returns all the jobs known. This is why all files must be parsed.
    my @job_files_found_lines = $ftps->dir($job_name)
        or die LogMessage ( "Cannot list for job ${job_name} message=$ftps->message()\n");

    my $parsed_job_status = ''; 
    my $counter=0;
    my @job_status_split = (split /.*\s+(JOB\d+)\s+([A-Z]+)\s+\d*\s+Spool Files/,$job_files_found_lines[$counter]);
    my $parsed_job_name=trim($job_status_split[1]);
    $parsed_job_status=$job_status_split[2];
    my $array_length = scalar @job_files_found_lines;
    LogMessage "\narray length=${array_length} expected_job_name=${job_name}\tjob_name=${parsed_job_name}\tjob_status=${parsed_job_status}\n";
    while($counter < $array_length && trim($parsed_job_name)!=$job_name) {
        @job_status_split = (split /.*\s+(JOB\d+)\s+([A-Z]+)\s+\d*\s+Spool Files/,$job_files_found_lines[$counter]);
        $parsed_job_name=trim($job_status_split[1]);
        LogMessage "\nexpected_job_name=${job_name}\tjob_name=${parsed_job_name}\tjob_status=${parsed_job_status}\n";
        $counter = $counter + 1;
    }
    if($job_name==$parsed_job_name) {
        LogMessage "Current job_name=${job_name} Found ${parsed_job_name} status=${parsed_job_status}\n";
        $parsed_job_status=$job_status_split[2];
    }
    return $parsed_job_status
}

我的日志结果:

Wed Feb  3 08:07:21 2021:  ********************************************************************************
Wed Feb  3 08:07:21 2021:  Monitoring job status in repeated loop until job is completed (STATUS=OUTPUT)
Wed Feb  3 08:07:21 2021:  ********************************************************************************
Wed Feb  3 08:07:21 2021:  **********************************************************************
Wed Feb  3 08:07:21 2021:  Getting JES status for job JOB21680
Wed Feb  3 08:07:21 2021:  **********************************************************************
Wed Feb  3 08:07:21 2021:  
array length=19 expected_job_name=JOB21680  job_name=JOB19471   job_status=OUTPUT**
Wed Feb  3 08:07:21 2021:  Current job_name=JOB21680 Found JOB19471 status=OUTPUT
Wed Feb  3 08:07:21 2021:  
Wed Feb  3 08:07:21 2021:  **********************************************************************
Wed Feb  3 08:07:21 2021:  Getting JES output and storing file /host-dirs/out/JOB21680.out
Wed Feb  3 08:07:21 2021:  **********************************************************************

请注意日志中的行“Current job_name=JOB21680 and Found JOB19471”。如果它说找到,那么这两个工作应该是相同的。在上面的代码片段中,请查看 trim($parsed_job_name)!=$job_name

标签: perl

解决方案


!=是数值比较,这些字符串都评估为零。字符串不等式运算符是ne.


推荐阅读