1

我正在使用一个 Amazon Perl 模块,它返回对哈希引用数组的引用作为 $record_sets,其中包含记录集数据,我很难取消引用它。我可以使用数据转储器打印数据,但我需要能够操作数据。以下是为模块提供的文档

提前致谢:

#list_resource_record_sets
#Lists resource record sets for a hosted zone.
#Called in scalar context:

$record_sets = $r53->list_resource_record_sets(zone_id => '123ZONEID');

#Returns: A reference to an array of hash references, containing record set data. Example:

$record_sets = [
{
name => 'example.com.',
type => 'MX'
ttl => 86400,
records => [
'10 mail.example.com'
]
},
{
name => 'example.com.',
type => 'NS',
ttl => 172800,
records => [
'ns-001.awsdns-01.net.',
'ns-002.awsdns-02.net.',
'ns-003.awsdns-03.net.',
'ns-004.awsdns-04.net.'
]
4

2 回答 2

4

当您有一个数组引用时,例如 $x = ['a','b','c'],您可以通过两种方式取消引用它。

print $x->[0]; # prints a
print $x->[1]; # prints b
print $x->[2]; # prints c

@y = @{$x}; # convert the array-ref to an array (copies the underlying array)
print $y[0]; # prints a
print $y[1]; # prints b
print $y[2]; # prints c

hash-ref 的工作原理相同,只是它使用花括号。例如 $x = {a => 1, b => 2, c => 3}。

print $x->{a}; # prints 1
print $x->{b}; # prints 2
print $x->{c}; # prints 3

%y = %{$x}; # convert the hash-ref to a hash (copies the underlying hash)
print $y{a}; # prints 1
print $y{b}; # prints 2
print $y{c}; # prints 3

将此应用于您的示例,该示例具有嵌套结构,您可以执行此操作。

for my $x ( @{$record_sets} ) {
  print $x->{name}, "\n";
  print $x->{type}, "\n";

  for my $y ( @{$x->{records}} ) {
    print $y, "\n";
  }
}

# or something more direct
print $record_sets->[0]->{name}, "\n";
print $record_sets->[0]->{records}->[1], "\n";
于 2012-10-05T21:39:59.273 回答
0

$record_sets 是一个数组引用。要取消引用它,您可以使用

my @array = @{ $record_sets };

每个记录集都是一个哈希引用。

for my $record_set ( @{ $record_sets } ) {
    my $set = %{ $record_set };
}

例如,要获取名称和记录(数组 ref):

for my $record_set ( @{ $record_sets } ) {
    print $record_set->{name},
          ': ',
          join ', ', @{ $record_set->{records} };
    print "\n";
}
于 2012-10-05T21:36:20.790 回答