与引用相关的Perl语法

与引用相关的Perl语法,perl,Perl,假设x是一个数组引用 我知道,[]提供了一个匿名数组引用,{}提供了一个匿名哈希引用。现在@{$x}是什么意思?这意味着取消对数组引用的引用 您将看到被引用数组的内容 注意,您可以使用简单的 @$x 就你而言 当数据结构中有多个级别时,如本例所示,需要使用{}字符: @{ $foo->{first_level}->{second_level} } 或 这也适用于其他人: 请参见这是一个解引用{$ref}是指引用,就像@array是指数组一样,这意味着无论您在哪里使用@array,

假设x是一个数组引用

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

这意味着取消对数组引用的引用

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

注意,您可以使用简单的

@$x
就你而言

当数据结构中有多个级别时,如本例所示,需要使用
{}
字符:

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

这也适用于其他人:


请参见

这是一个解引用
{$ref}
是指引用,就像
@array
是指数组一样,这意味着无论您在哪里使用
@array
,都会使用
{$ref}

>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

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

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

然后使用
@$x
@{$x}
,您将返回
@a

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

$y = @{$x};
它将返回数组中
$x
作为引用的元素计数

在列表上下文中:

@y = @{$x};
它将返回数组的元素

如果后跟
[列表]

@{$x}[1,42]
它生成一个数组切片,数组中指定元素的列表,
$x
是该数组的引用

如果后跟
{LIST}

@{$x}{ 'foo', 'bar' }
它生成一个哈希片,哈希中指定键的值列表,
$x
是该哈希的引用


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

+1表示perlreftut!学习创建和使用参考文献的最佳文档!
@{$x}[1,42]
@{$x}{ 'foo', 'bar' }