在函数调用的同一行获取哈希键/值

tst*_*ter 1 perl

以下是重现问题的代码:

sub hello { return (h => 1, n => 1); }
print join ", ", values hello();
Run Code Online (Sandbox Code Playgroud)

我收到错误:

arg 1到值的类型必须是第4行的哈希(不是子例程条目),靠近");" 执行 - 由于编译错误而中止.

我知道我可以打破电话和打印两行:

sub hello { return (h => 1, n => 1); }
my %hash = hello();
print join ", ", values %hash;
Run Code Online (Sandbox Code Playgroud)

但我不想这样做.有没有办法在一行中执行此操作,以便我不必一直创建临时变量?

mob*_*mob 8

您可以使用哈希引用:

sub hello { return {h => 1, n => 1}; }
print join ", ", values %{hello()};
Run Code Online (Sandbox Code Playgroud)

但除此之外,没有.Perl可以解释标量或列表上下文中子例程的返回值,但是没有在哈希上下文中返回值的概念.


更新:这也有效

sub hello { return (h => 1, n => 1); }
print join ", ", values %{{hello()}};
Run Code Online (Sandbox Code Playgroud)

内部{}hello()列表的输出转换为哈希引用.外部%{}取消引用哈希.

(%{{}}}算作伪算子吗?)


Gil*_*il' 8

我没有看到真正的程序中的用处,但是,它是可能的.

print join ", ", values %{{hello()}};
Run Code Online (Sandbox Code Playgroud)

说明:hello()是一个清单; {hello()}是一个哈希引用; %{{hello()}}哈希.