if 命令未按要求执行。也许是由于非局部变量?

The if command is not performed as desire. Maybe due to non local variables?

我需要在 Perl 程序中拆分两种不同类型的记录。 每条记录都带有不同的代码(ZBKPF_W 和 ZBUS2081_W),因此它们会根据代码进行不同的处理。

信息来自解析文件名,最后我应该根据正确的解析字段获得正确的命令。 然而,Perl 中的 if 命令显然不遵守它,在一半的情况下,我得到了错误的数据。

请允许我展示过程: 需要拆分的 2 种不同类型的文档:

   # get info from filename and process each file
   # BO-CC-FY-DOCID-KOFAX#.PDF
   # ZBKPF_W-DE10-2020-1900000001-00034113.PDF and
   # ZBUS2081_W-DE10-2019-5106000000-00034114.PDF 
   ( $fileindex, $filetype) = split( '\.', $dir[i] ); 
   $fname = $dir[i]; 
   $BO = "";
   $CCode = "";
   $FY = "";
   $DocNo = "";
   $KofaxNo = "";
   $CCDocNoFY = "";
   $CCFYDocNo = "";   
   
   # Get the index values from filename 
   ( $BO, $CCode, $FY, $DocNo, $KofaxNo ) = split( '\-', $fileindex );
          
   if ( $BO == "ZBKPF_W" ) {
     $R3_SAP_OBJ = "ZBKPF_W";
     $CCDocNoFY = $CCode.$DocNo.$FY;
     $CCFYDocNo = $CCode.$FY.$DocNo; 
   }
   else {
     if ( $BO == "ZBUS2081_W" ) {
       $R3_SAP_OBJ = "ZBUS2081_W";
       $CCDocNoFY = $DocNo.$FY;
       $CCFYDocNo = $FY.$DocNo;
     }
   }

所以,最后,所有记录看起来像 ZBUS2081_W 结果:

$R3_SAP_OBJ = "ZBBUS2081_W"
$CCDocNoFY = $DocNo.$FY
$CCFYDocNo = $FY.$DocNo

始终提供 if 命令的 else。

正确的结果应该是:

For ZBKPF_W-DE10-2020-1900000001-00034113.PDF
$R3_SAP_OBJ = "ZBKPF_W"
$CCDocNoFY = "DE1019000000012020"
$CCFYDocNo = "DE1020201900000001"
For ZBUS2081_W-DE10-2019-5106000000-00034114.PDF
$R3_SAP_OBJ = "ZBUS2081_W"
$CCDocNoFY = "51060000002019"
$CCFYDocNo = "20195106000000"

我尝试过使用嵌套的 IF、ELSEIF 以及在 MY 中使用局部变量 同样的结果...我通常不喜欢 Perl,所以我远不是专家,但这是 ArchiveLink 的要求,所以我需要它 运行 顺利。

拜托,如果您知道为什么可能是问题的根本原因,我将不胜感激。

== 在 Perl 中比较数字。使用 eq 比较字符串。

当使用以 Z 开头的字符串时,它被强制转换为数字 0,因此第一个条件始终为真。

有关详细信息,请参阅 perlop