调用函数时用变量替换散列

Why*_*ine 2 perl hash function

我想要做的是替换函数调用:

my_function({'param1' => 123, 'param2' => 456});
Run Code Online (Sandbox Code Playgroud)

和:

my %tmp = {'param1' => 123, 'param2' => 456};
my_function(%tmp);
Run Code Online (Sandbox Code Playgroud)

我收到运行时错误消息:

Can't use string ("HASH(0x16cffb0)") as a HASH ref while "strict refs" in use
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

GMB*_*GMB 6

这不会做你想要的:

my %tmp = {param1 => 123, param2 => 456};
Run Code Online (Sandbox Code Playgroud)

您正在尝试为散列分配散列引用。这引发了警告:

Reference found where even-sized list expected at -e line 4.
Run Code Online (Sandbox Code Playgroud)

道德:总是use strict; use warnings;,所以这样的错误很快就会被发现。

您的函数似乎将哈希引用作为参数。所以要么构建一个散列并通过引用传递它:

my %tmp = (param1 => 123, param2 => 456);
my_function(\%tmp);
Run Code Online (Sandbox Code Playgroud)

或者构建一个散列引用并按原样传递它:

my $tmp = {param1 => 123, param2 => 456};
my_function($tmp);
Run Code Online (Sandbox Code Playgroud)