这一行perl在做什么?

这一行perl在做什么?,perl,Perl,我不明白返回语句在做什么 my %config = ( 'name' => 'blah', ); return wantarray ? %config : \%config; 尤其是\%部分让我感到困惑。请参阅: 如果当前执行的子例程或eval的上下文正在查找列表值,则返回true。如果上下文正在查找标量,则返回false。如果上下文不查找任何值(void context),则返回未定义的值 如果调用方不需要列表,则\%config语法返回对%config哈希的引用,而

我不明白返回语句在做什么

my %config = (
  'name'       => 'blah',
);

return wantarray ? %config : \%config;
尤其是\%部分让我感到困惑。

请参阅:

如果当前执行的子例程或eval的上下文正在查找列表值,则返回true。如果上下文正在查找标量,则返回false。如果上下文不查找任何值(void context),则返回未定义的值


如果调用方不需要列表,则
\%config
语法返回对
%config
哈希的引用,而不是将哈希展平为交替键和值的列表。

返回WANTARY@数组:\@array是一个广泛使用的习惯用法,因此函数调用方可以同时执行
my$array\u ref=the\u sub()
my@array=the\u sub()
。(
\
是参考运算符)。有些情况下,这会导致奇怪的结果;我发现最好总是返回引用。最值得注意的是,尝试将函数用作哈希值(
$h={key=>the_sub()}
)将无法按预期工作!那么\只是一个引用运算符吗?@SinanÜnür您的编辑本身是不正确的-
wantarray
is
true
如果调用方也想要一个哈希值。@Alnitak,如果调用方想要一个列表,这是真的。不幸的是,它的名字不好。@ysth您的编辑可能需要解释一下。无论如何,如果您
返回%foo
并将结果分配给
%bar
,那么您已经返回了一个散列(副本)。如果将结果分配给
@bar
,则确实会得到一个键和值的展开列表。但正是列表分配提供了将%foo;如果
返回%foo
并将结果分配给
$bar
,则会得到非常不同的结果。这使得“returnashash”成为一个模棱两可的语句(并且从不描述在这两种情况下实际发生的事情)。这有用吗?