6

我只是想学习一点 Perl 并遇到了这个问题:

foreach $element (@{$records})
{
    do something;
}

在我的新手眼中,这写着:“对于名为 @{$records} 的数组中的每个元素,做一些事情”但是,因为这似乎是一个不太可能的数组名称(@{$完全是“”),我想它不是简单的?

我也遇到过“ %$”一起使用。我知道%表示散列并$表示标量,但不知道它们一起意味着什么。

任何人都可以阐明这些吗?

4

2 回答 2

10

在 Perl 中,您可以拥有对数据结构的引用(指针):

# an array
my @array;

# a reference to an array
my $ref = \@array;

当您有一个能够使用数组的引用时,您需要取消引用

@{ $ref }

如果您需要访问一个元素,如

$array[0]

你可以对参考做同样的事情

${$ref}[0]

花括号{}是可选的,您也可以使用

$$ref[0]
@$ref

但我个人觉得它们的可读性较差。

这同样适用于所有其他类型(如%$哈希引用)。

有关详细信息,请参阅man perlref 有关教程,请参阅 man perlreftut。

编辑

箭头运算符->也可用于取消引用数组或哈希

$array_ref->[0]

或者

$hash_ref->{key}

有关详细信息,请参阅man perlop

于 2012-09-07T13:24:22.297 回答
3

如果您有对数组或散列的引用,您将使用标量来保存引用:

my $href = \%hash;
my $aref = \@array;

当您想取消引用这些引用时,您将使用适合引用类型的符号:

for my $element (@$aref) {
}

for my $key (keys %$href) {
}
于 2012-09-07T13:24:06.243 回答