如何处理变量哈希值

时间:2016-01-08 19:41:08

标签: perl perl-data-structures

我正在处理一个SOAP API,它可以返回散列或散列数组,具体取决于是否有一个或多个记录。这使得迭代过程变得棘手。我当前的方法是检查返回的ref,如果它是一个数组,则将其复制到数组中,否则将其推送到数组上然后迭代它。是否有更清洁的习惯用法?

my @things;
if ( ref $result->{thingGroup} eq 'ARRAY' ) {
    @things = @{ $result->{thingGroup} };
} elsif ( ref $result->{thingGroup} eq 'HASH' ) {
    push @things, $result->{thingGroup};
} 

foreach my $thing (@things) { ... }

2 个答案:

答案 0 :(得分:4)

与@ cjm的答案类似,但使用ternary operator

my $things = ref $result->{thingGroup} eq 'ARRAY'
    ? $result->{thingGroup}
    : [ $result->{thingGroup} ];

答案 1 :(得分:2)

我会使用数组引用来避免不必要的副本:

my $things = $result->{thingGroup};
unless (ref $things eq 'ARRAY' ) {
    $things = [ $things ];
} 

foreach my $thing (@$things) { ... }

我删除了elsif,因为它不清楚是否添加了任何内容。如果你想确保一个非数组实际上是一个哈希,那么你也应该有一些代码来处理它不是的情况。