Perl和评估转储程序结果

Perl和评估转储程序结果,perl,Perl,我向第三方发出API调用,结果以我命名为%hash的哈希值返回给我 当我使用Data::Dumper打印结果时,我得到以下结果: print Dumper %hash; $VAR1 = ''; $VAR2 = { 'Field1' => 'first result', 'Field2' => {}, 'Field3' => 'random value', 'Field4' => {}, 'Field5' => '1

我向第三方发出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'}不返回任何值(显然)。

您的
%hash
包含一个键(空字符串)和一个值(表示为
$VAR2
的数据结构)。调用
转储程序(%hash)
时,
转储程序
函数将哈希作为包含两个元素的扁平列表接收,因此它将输出两个值

使用
转储程序
更规范的方法是传递对数据结构的引用:

print Dumper \%hash;

您的
%hash
只有一个键
'
(空字符串),其中包含一个hashref。看起来是这样的:

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

返回分配它的位置,检查是否需要使用
$hash

您需要将hash转换为hash引用:

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

要访问值,您需要使用以下命令:

$hash{''}{'Field1'}

因为实际上你有散列。

通常你会通过引用转储散列,所以
打印转储程序\%hash

目前,
Data::Dumper
将打印哈希键和值的列表,因此您的
%hash
似乎只有一个元素,其中的键是空字符串


您可以通过
$hash{''}
访问它,因此值是
$hash{''}{Field1}
等。

那么我如何准确地检索field2的值呢?它是$res->{}{'Field2'}吗?实际上,我意识到如果我将接收结果的数据结构更改为哈希引用,那么访问这些值就不再是问题了。我现在意识到返回的结果是一个hashref而不是一个hash——这消除了访问这些hash值的复杂性。谢谢。伊万,我刚刚编辑了上面的第一个答案。这确实是正在发生的事情。API正在返回哈希引用。一旦我将变量更改为散列引用并转储它,现在我就清楚了如何访问散列值。非常感谢。