更新:我所知道的关于引用/解除引用的一切都来自这里:http://www.thegeekstuff.com/2010/06/perl-array-reference-examples/
我正在使用一个库(来自库文档):
Returns a reference to an array of hash references
这在概念上对我有意义(我不是编程的新手),但在功能上没有意义(我显然对perl来说很新)。
以下是一些代码:
my $Obj = QA::STK::ModuleImUsing->new(arguments, to, new);
$Obj->createClient();
$Obj->sync( ['/tmp/files/...']);
my $result = $Obj->method_in_question(['/tmp/files/ff-latest.xml']);
到目前为止一切顺利。 $result
现在保存对数组的引用。
所以当我这样做时:
print "Result: @{ $result} \n";
我明白了:
Result: HASH(0x20d95b0)
可爱!但是我仍然需要取消引用哈希。然而,这里的事情变得奇怪(或者他们已经变得奇怪了?)。
my $hash_ref = @{ $result};
print Dump($hash_ref));
我明白了:
$VAR1 = 1;
哪个...不是我期待的。
我的期望是错误还是我以错误的方式取消引用?
答案 0 :(得分:5)
如果@$result
是一个数组,那么您的LHS必须是一个列表。否则将为$hashref
分配数组大小。
my ($hash_ref) = @{ $result};
print Dump($hash_ref));
答案 1 :(得分:3)
%hash
。$hashref = \%hash
@array = ($hashref)
$arrayref = \@array
这是我们的结果:$result = $arrayref
。不要让它倒退:
@result_array = @$result
$result_hashref = $result_array[0]
或合并:$result_hashref = $result->[0]
%result_hash = %$result_hashref
或合并:%result_hash = %{ $result->[0] }
(请注意,这些会复制)$result_hash{$key}
$result_hashref->{$key}
$result->[0]{$key}
请注意,$scalar = @{ $arrayref }
无法正常工作,因为数组(@{ … }
是)在标量上下文中返回数组的 length 。要在分配中强制列表上下文,请将左侧放入parens:(…) = here_is_list_context
(其中…
是零个或多个左值的列表)。
答案 2 :(得分:1)
my $hash_ref = @{$result};
与
相同my @array = @{$result};
my $hash_ref = @array;
这会强制数组在标量上下文中由赋值运算符计算,这会使其计算为数组中的项数,或者为1。