如何访问Perl对象结构上的数据

roejwanj  于 2022-12-04  发布在  Perl
关注(0)|答案(2)|浏览(153)

我在中有以下Perl代码,其中我有如下Perl结构:`

use Data::Dumper;

my %data = (
  'status' => 200,
  'message' => '',
  'response' => {
    'name' => 'John Smith',
    'id' => '1abc579',
    'ibge' => '3304557',
    'uf' => 'XY',
    'status' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' )
  }

);

my $resp = $data{'status'};
print "Response is $resp \n";
print Dumper(%data->{'response'});

但是,如果我尝试这样的操作,则可以获得状态字段:my $resp = $data{'response'}
我得到的响应是HASH(0x8b6640)
因此,我想知道是否有一种方法,我可以提取所有“响应”字段的数据,就像我可以提取“状态”一样,而不会得到哈希...
我在访问数据时尝试了所有类型的组合,但在尝试获取“response”的内容时,仍然会返回哈希值

r3i60tvu

r3i60tvu1#

$data{'response'}是访问散列值%data上的该字段的正确方法,它返回一个散列引用,默认情况下以HASH(0x8b6640)语法输出(相对没有帮助),但如果将该引用传递给Dumper,它将显示所有内容。

print Dumper($data{'response'});

要真正 * 访问 * 这些子字段,需要解引用,这是通过间接->操作完成的。

print $data{'response'}->{'name'}

第一次访问不需要->,因为你要访问的是hash variable(即带有%符号的变量)上的字段;第二次访问需要,因为你要解引用一个引用,至少在本质上,它和其他标量一样带有$符号。

wnvonmuf

wnvonmuf2#

谢谢你的帖子。我修改了代码如下:

use Data::Dumper;

my %data = (
  'status' => 200,
  'message' => '',
  'response' => {
    'name' => 'John Smith',
    'id' => '1abc579',
    'ibge' => '3304557',
    'uf' => 'XY',
    'status' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' )
  }

);

my $resp = $data{'response'};
print Dumper($resp);

现在,它的工作就像一个魅力,我能够得到我想要的数据。

相关问题