0

我对第三方进行 API 调用,结果以我命名为 %hash 的哈希值返回给我。

当我使用 Data::Dumper 打印结果时,我得到以下结果:

print Dumper %hash;

$VAR1 = '';
$VAR2 = {
     'Field1' => 'first result',
     'Field2' => {},
     'Field3' => 'random value',
     'Field4' => {},
     'Field5' => '102',
     'Field6' => '3600176056428',
     'Field7' => 'AhhRbwSXxIzaSZYuvgXE8AmAXUdy'
};

我不习惯 Dumper 返回两个值。我打印了结构,以便确定如何访问它所包含的值。我想访问第二个 VAR ($VAR2) 中的哈希数据结构。这究竟是如何完成的?$hash{'Field2'} 不返回任何值(显然)。

4

4 回答 4

2

%hash包含一个键 - 空字符串和一个值 - 您看到的数据结构表示为$VAR2. 当您调用 时Dumper(%hash),该Dumper函数将您的散列接收为包含两个元素的扁平列表,因此它输出两个值。

更规范的使用方式Dumper是传递对数据结构的引用:

print Dumper \%hash;
于 2013-02-11T21:41:41.507 回答
2

%hash只有一个''包含 hashref 的键(空字符串)。它看起来像这样:

'' => {
     'Field1' => 'first result',
     'Field2' => {},
     'Field3' => 'random value',
     'Field4' => {},
     'Field5' => '102',
     'Field6' => '3600176056428',
     'Field7' => 'AhhRbwSXxIzaSZYuvgXE8AmAXUdy'
};

返回到您分配它的位置并检查您是否可能需要$hash

于 2013-02-11T21:44:27.977 回答
2

通常你会通过引用转储一个哈希,所以print Dumper \%hash.

就目前而言,Data::Dumper将打印哈希键和值的列表,因此看起来您%hash有一个以空字符串作为键的元素。

You can access this as $hash{''}, so the values are $hash{''}{Field1} etc.

于 2013-02-11T21:44:45.903 回答
1

您需要将哈希转换为哈希引用:

print Dumper \%hash;

否则%hash转换为键 => 值对的列表。这是列表上下文中的哈希行为。

要访问值,您需要使用以下内容:

$hash{''}{'Field1'}

因为实际上你有散列的散列。

于 2013-02-11T21:44:30.397 回答