如何取消引用哈希引用

Ram*_*amy 0 perl hash dereference

更新:我所知道的关于引用/解除引用的所有内容都来自: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']);
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.$result现在保存对数组的引用.

所以当我这样做时:

print "Result: @{ $result} \n";
Run Code Online (Sandbox Code Playgroud)

我明白了:

Result: HASH(0x20d95b0)
Run Code Online (Sandbox Code Playgroud)

可爱!但是我仍然需要取消引用哈希.然而,这里的事情变得奇怪(或者他们已经变得奇怪了?).

my $hash_ref = @{ $result};
print Dump($hash_ref));
Run Code Online (Sandbox Code Playgroud)

我明白了:

$VAR1 = 1;
Run Code Online (Sandbox Code Playgroud)

哪个...不是我所期待的.

我的期望是错的还是我以错误的方式取消引用?

Mil*_*ler 5

如果@$result是数组,则LHS必须是列表.否则$hashref将分配数组大小.

my ($hash_ref) = @{ $result};
print Dump($hash_ref));
Run Code Online (Sandbox Code Playgroud)

  • 这很棒,但你能解释一下发生了什么吗?刚试过它.这有效.但为什么? (2认同)