连续的运算符和括号

时间:2012-09-07 13:20:18

标签: perl syntax operators brackets curly-brackets

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

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

对我的新手来说,这是:     “对于名为@ {$ records}的数组中的每个元素,执行某些操作” 但是,因为这似乎是一个不太可能的数组名称(完全使用“@{$”),我想它不是那么简单吗?

我也遇到了“%$”一起使用。 我知道%表示哈希,$表示标量,但不知道它们的含义。

任何人都可以对这些有所了解吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

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

如果要取消引用这些引用,可以使用适合引用类型的符号:

for my $element (@$aref) {
}

for my $key (keys %$href) {
}