如何从perl中的两个数组创建哈希映射(键值对)

yan*_*kel 1 perl hash hashmap

我有两个相等长度的数组,一个包含键,另一个包含值.

如何将它们组合成一个哈希,我可以通过哈希{key}访问它并获取值.

我试过了

        my %hash = map { $key[$_], $values[$_] } 0..$#key;
Run Code Online (Sandbox Code Playgroud)

但它有点保存在一个长列表中的所有内容,其中每个第二个值都是从调试器中可以看到的值.

 DB<104> x %hash
0  'linking_parameter_1'
1  '$$SHIBBOLETH'
2  'service_type'
3  'getFullTxt'
4  'crossref_supported'
5  'Yes'
6  'parser'
7  'Bulk::BULK'
8  'internal_name'
9  'ELSEVIER_SD_EBOOK-COMPLETE_COLLECTION_1995-20065'
10  'object_lookup'
11  'yes'
12  'linking_level'
13  'BOOK'
14  'displayer'
15  'FT::NO_FILL_IN'
16  'parse_param'
17  ''
Run Code Online (Sandbox Code Playgroud)

当我输入

x %hash{parser}
Run Code Online (Sandbox Code Playgroud)

它不能评估.也许我只是不想以正确的方式访问它?

Bor*_*din 6

使用哈希切片来定义它

my %hash;
@hash{@key} = @values;
Run Code Online (Sandbox Code Playgroud)

但是调试器的输出是您应该期望的,因为散列在传递到键/值列表之前被扩展x.要查看复合数据的内部结构,你应该传递一个参考,以x

  DB<104> x \%hash
0  HASH(0xe7c88880)
   'linking_parameter_1' => '$$SHIBBOLETH'
   'service_type' => 'getFullTxt'
   'crossref_supported' => 'Yes'
   'parser' => 'Bulk::BULK'
   'internal_name' => 'ELSEVIER_SD_EBOOK-COMPLETE_COLLECTION_1995-20065'
   'object_lookup' => 'yes'
   'linking_level' => 'BOOK'
   'displayer' => 'FT::NO_FILL_IN'
   'parse_param' => ''
Run Code Online (Sandbox Code Playgroud)