ハッシュの要素にアクセスできません。アクセスしたい要素は配列です。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
これは動作しません。2 つのキーが一致しない理由を理解しようと、しばらくトラブルシューティングを行ってきました。
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";
}
...これは実際に「STRING MATCH」を出力します
さらなる調査: ( 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
2 つの文字列が実際には同じであることを意味します。
背景: アプリケーションは mod_perl で実行されています。Apache と mysql (すべてのデータベースとテーブルを含む) は UTF8 に設定されています。
どこを調べることができるか、誰か手がかりはありますか?
前もって感謝します