考虑 x 是一个数组引用。
我知道这[]
给出了一个匿名数组引用并{}
给出了一个匿名哈希引用。现在是什么@{$x}
意思?
这意味着取消引用数组ref。
您将看到引用数组的内容。
请注意,您可以使用简单的
@$x
在你的情况下。
{ }
当您的数据结构中有多个级别时,需要这些字符,如下例所示:
@{ $foo->{first_level}->{second_level} }
或者
@{ $foo->[$first_level]->[$second_level] }
这也适用于其他印记:
%{ } # HASH
$ # SCALAR
这是一个取消引用。是对数组@{ $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
if$x
是对数组的引用,如
@a = (1,2,3);
$x = \@a
然后用@$x
or @{$x}
,你回来了@a
。
取决于上下文和接下来的内容。在标量上下文中:
$y = @{$x};
它将返回数组中$x
作为引用的元素的计数。
在列表上下文中:
@y = @{$x};
它将返回数组的元素。
如果后跟[LIST]
:
@{$x}[1,42]
它产生一个数组切片,一个数组中指定元素的列表,$x
作为引用。
如果后跟{LIST}
:
@{$x}{ 'foo', 'bar' }
它产生一个散列片,散列中指定键的值列表$x
作为参考。
请注意,{}
周围$x
与{}
用于构造匿名哈希无关,它们是代码块的分隔符。如果里面是一个简单的标量变量,可以省略;如果它们没有被省略,它们可以包含任意表达式,甚至可以包含最后返回引用的多个语句。