在Perl中,如何取消引用作为参数传递给函数的临时哈希?
MyFunct({
Param1 => "knob1",
Param2 => "knob2"
});
# this part never seems to work...
sub MyFunct {
my %param = %{shift()};
my $p1 = $param{Param1};
print "p1: $p1\n";
}
答案 0 :(得分:3)
您的代码按原样工作。
$ perl -e'
MyFunct({
Param1 => "knob1",
Param2 => "knob2"
});
# this part never seems to work...
sub MyFunct {
my %param = %{shift()};
my $p1 = $param{Param1};
print "p1: $p1\n";
}
'
p1: knob1
也就是说,您不必要地复制引用的哈希值。以下是一种更好的方法:
$ perl -e'
MyFunct({
Param1 => "knob1",
Param2 => "knob2"
});
sub MyFunct {
my $param = shift;
my $p1 = $param->{Param1};
print "p1: $p1\n";
}
'
p1: knob1
答案 1 :(得分:2)
除了@ikegami的答案外,我还要补充一点,也许您不需要参考。通过使用隐式参数数组@_
,将值作为键/值对传递,可以轻松地将列表转换为哈希。
可以使用箭头=>
分隔符或在其位置使用标准逗号,
分隔符来执行键/值对。以下是使用箭头的示例。
#!/usr/bin/perl
MyFunct(
Param1 => "knob1",
Param2 => "knob2"
);
# this part never seems to work...
sub MyFunct {
my %param = @_;
my $p1 = $param{Param1};
local $\ = "\n";
print "p1: $p1";
print "p2: $param{Param2}";
}