在 Windows 10 x64 上使用 Perl v5.22.1。我已经设定
use strict;
use warnings;
此代码(基于@Jeef在此问题中接受的答案)是解析文件的 while 循环的一部分。它默默地退出:
my %hvac_codes; # create hash of unique HVAC codes
#Check the hash to see if we have seen this code before we write it out
if ( $hvac_codes{$hvacstring} eq 1) {
#Do nothing - skip the line
} else {
$hvac_codes{$hvacstring} = 1;
}
如果我像这样改变它
my %hvac_codes; # create hash of unique HVAC codes
#Check the hash to see if we have seen this code before we write it out
if ( defined $hvac_codes{$hvacstring} ) {
#Do nothing - skip the line
} else {
$hvac_codes{$hvacstring} = 1;
print (" add unique code $hvacstring \n");
}
它不会静默退出(也很好奇为什么静默退出而不是未定义引用上的错误),但不能按预期工作。每个 $hvacstring 都会被添加到 %hvac_codes 哈希中,即使它们已被添加。(由印刷品证明)
我想看看哈希是如何结束的,以确定是否每个代码都被视为未定义,因为测试是错误的,或者对哈希的分配不起作用。我尝试了自卸车两种方式:
print dumper(%hvac_codes);
和(基于这个问题的答案)
print dumper(\%hvac_codes);
Global symbol "%hvac_codes" requires explicit package name
在这两种情况下,即使my %hvac_codes;
存在,转储程序线也会因错误而失败。现在我已经把它注释掉了。