perl - 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
解决方案
!=
是数值比较,这些字符串都评估为零。字符串不等式运算符是ne
.
推荐阅读
- git - 使用相同的代码库维护多个版本
- amazon-web-services - Cognito 的 AWS 凭证可以向其他区域发送请求吗?
- ruby-on-rails - 从 ESPG 4326 转换为 ESPG 3758
- javascript - 为什么异步函数会导致 PropTypes 为空
- php - php标签后vscode自动缩进?
- python - 用于字典输出的 Python 文档字符串文档
- html - 有没有办法在 macOS 上的 Safari 网站上强制使用暗模式?
- python - Fuzzywuzzy process.extract() 不返回列表
- ios - 卡在 Xcode 中获取 firebase-ios-sdk
- regex - 解析字符串以从非数字表示中提取日期