我无法访问哈希的元素。我要访问的元素是一个数组。当使用 Data::Dumper 转储时,哈希看起来像这样:
$VAR1 = {
#Lots of vars here
'ResponsibleID' => '1',
'DynamicField_AssetMatricole' => [
'2400930 ',
'2901666 ',
'2401940 '
],
'ChangeBy' => '19',
#Lots of other vars here
};
现在,当我尝试访问由“DynamicField_AssetMatricole”标识的嵌套数组时,它在我使用时效果很好:
my $DFname = "DynamicField_AssetMatricole";
$VAR1{$DFname} #WORKS
但是,实际的密钥来自 mysql,并存储在另一个哈希结构中:
$Param{DynamicFieldConfig}->{Name} #this contains "AssetMatricole"
因此,我希望该数组可以通过以下方式访问:
$VAR1{'DynamicField_'.$Param{DynamicFieldConfig}->{Name}} #DOES NOT WORK
这不起作用。我们已经排查了一段时间,试图了解为什么这两个键不匹配:
my $DFname = 'DynamicField_'.$Param{DynamicFieldConfig}->{Name};
my $DFname2 = 'DynamicField_'.'AssetMatricole';
$VAR1{$DFname} # DOES NOT WORK
$VAR1{$DFname2} # WORKS
if ( $DFname eq $DFname2 ) {
print ERRLOG "STRING MATCH!\n";
} else {
print ERRLOG "STRING DON'T MATCH!\n";
}
...这实际上打印出“字符串匹配”
进一步调查:(使用http://metacpan.org/pod/Data::HexDump)
use Data::HexDump;
my $DFname = 'DynamicField_'.$Param{DynamicFieldConfig}->{Name};
my $DFname2 = 'DynamicField_'.'AssetMatricole';
my $hd = new Data::HexDump;
my $hd2 = new Data::HexDump;
$hd->data($DFname);
print ERRLOG $hd->dump;
$hd2->data($DFname2);
print ERRLOG $hd2->dump;
输出:
00000000 44 79 6E 61 6D 69 63 46 - 69 65 6C 64 5F 41 73 73 DynamicField_Ass
00000010 65 74 4D 61 74 72 69 63 - 6F 6C 65 etMatricole
00000000 44 79 6E 61 6D 69 63 46 - 69 65 6C 64 5F 41 73 73 DynamicField_Ass
00000010 65 74 4D 61 74 72 69 63 - 6F 6C 65 etMatricole
这意味着这两个字符串实际上是相同的!
背景:应用程序正在 mod_perl 下运行。Apache 和 mysql(及其所有 dbs 和表)设置为 UTF8。
有没有人知道我们可以在哪里调查?
提前致谢