4

考虑 x 是一个数组引用。

我知道这[]给出了一个匿名数组引用并{}给出了一个匿名哈希引用。现在是什么@{$x}意思?

4

4 回答 4

8

这意味着取消引用数组ref

您将看到引用数组的内容。

请注意,您可以使用简单的

@$x

在你的情况下。

{ }当您的数据结构中有多个级别时,需要这些字符,如下例所示:

@{ $foo->{first_level}->{second_level} }

或者

@{ $foo->[$first_level]->[$second_level] }

这也适用于其他印记

%{ } # HASH
$    # SCALAR

perldoc perlreftut

于 2013-03-11T18:29:18.203 回答
8

这是一个取消引用。是对数组@{ $ref }的引用,这意味着你可以在任何你使用的地方使用.@array@{ $ref }@array

>perl -E"@array = qw( a b c ); say $_ for @array;"
a
b
c

>perl -E"$ref = [qw( a b c )]; say $_ for @{ $ref };"
a
b
c

明确时可以省略花括号。

>perl -E"$ref = [qw( a b c )]; say $_ for @$ref;"
a
b
c
于 2013-03-11T18:29:36.260 回答
4

if$x是对数组的引用,如

@a = (1,2,3);
$x = \@a

然后用@$xor @{$x},你回来了@a

于 2013-03-11T18:30:25.907 回答
1

取决于上下文和接下来的内容。在标量上下文中:

$y = @{$x};

它将返回数组中$x作为引用的元素的计数。

在列表上下文中:

@y = @{$x};

它将返回数组的元素。

如果后跟[LIST]

@{$x}[1,42]

它产生一个数组切片,一个数组中指定元素的列表,$x作为引用。

如果后跟{LIST}

@{$x}{ 'foo', 'bar' }

它产生一个散列片,散列中指定键的值列表$x作为参考。

参考快速参考

请注意,{}周围$x{}用于构造匿名哈希无关,它们是代码块的分隔符。如果里面是一个简单的标量变量,可以省略;如果它们没有被省略,它们可以包含任意表达式,甚至可以包含最后返回引用的多个语句。

于 2013-03-11T22:23:14.393 回答