这是重现问题的代码:
sub hello { return (h => 1, n => 1); }
print join ", ", values hello();
我收到错误:
arg 1 到值的类型必须是散列
(不是子程序入口)在 - 第 4 行,
靠近 ”);”执行 - 由于中止
到编译错误。
我知道我可以将调用和打印分成两行:
sub hello { return (h => 1, n => 1); }
my %hash = hello();
print join ", ", values %hash;
但我不想那样做。有没有某种方法可以在一行中完成此操作,这样我就不必一直创建临时变量?
您可以使用哈希引用:
sub hello { return {h => 1, n => 1}; }
print join ", ", values %{hello()};
但除此之外,没有。 Perl 可以在标量或列表上下文中解释子例程的返回值,但没有在散列上下文中返回值的概念。
Update: 这也有效
sub hello { return (h => 1, n => 1); }
print join ", ", values %{{hello()}};
内在{}
将输出转换为hello()
从列表到哈希引用。
外层%{}
取消引用哈希。
(Does %{{}}}
算作一个伪运算符?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)