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)
我究竟做错了什么?
这不会做你想要的:
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)