【发布时间】:2015-11-04 00:04:50
【问题描述】:
#!/usr/bin/perl
use Data::Dumper;
sub giveMeARef {
my %hash = %{$_[0]};
print "arg: ", Dumper($_[0]);
print "deref: ", Dumper(%hash);
}
my %hash = ( "a" => (1,2,3), "b" => (3,4,5));
giveMeARef(\%hash);
这会产生以下输出:
arg: $VAR1 = {
'2' => 3,
'4' => 5,
'a' => 1,
'b' => 3
};
deref: $VAR1 = 'b';
$VAR2 = 3;
$VAR3 = '2';
$VAR4 = 3;
$VAR5 = 'a';
$VAR6 = 1;
$VAR7 = '4';
$VAR8 = 5;
我尝试按照How do I dereference a Perl hash reference that's been passed to a subroutine?中的示例进行操作
但我相信因为我的哈希值更复杂,所以它不适合我。如何回到我传入的原始结构?
【问题讨论】:
-
您在创建列表时将其展平。您需要改用引用:
(a => [1, 2, 3], b => [3, 4, 5]). -
请注意,您的
giveMeARef非常浪费。应该是:sub giveMeARef { my $hash = $_[0]; pop(@{ $hash->{a} }); } -
你打算做什么?只需打印数组或访问其元素?
-
@ikegami 你说的浪费是什么意思?
-
不必要地复制哈希是浪费时间和内存
标签: perl hash reference subroutine