-1

ハッシュの要素にアクセスできません。アクセスしたい要素は配列です。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 に設定されています。

どこを調べることができるか、誰か手がかりはありますか?

前もって感謝します

4

1 に答える 1