考虑 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
然后用@$xor @{$x},你回来了@a。
取决于上下文和接下来的内容。在标量上下文中:
$y = @{$x};
它将返回数组中$x作为引用的元素的计数。
在列表上下文中:
@y = @{$x};
它将返回数组的元素。
如果后跟[LIST]:
@{$x}[1,42]
它产生一个数组切片,一个数组中指定元素的列表,$x作为引用。
如果后跟{LIST}:
@{$x}{ 'foo', 'bar' }
它产生一个散列片,散列中指定键的值列表$x作为参考。
请注意,{}周围$x与{}用于构造匿名哈希无关,它们是代码块的分隔符。如果里面是一个简单的标量变量,可以省略;如果它们没有被省略,它们可以包含任意表达式,甚至可以包含最后返回引用的多个语句。