perl - 连续的运算符和括号

标签 perl syntax operators brackets curly-brackets

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

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

在我的新手看来,这是:
“对于名为@ {$ records}的数组中的每个元素,执行某项操作”
但是,由于这似乎是数组的一个不太可能的名称(总共带有“@{$”),所以我想这不是那么简单吗?

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

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

最佳答案

在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

关于perl - 连续的运算符和括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318937/

相关文章:

prolog - Prolog 中的奇怪运算符 (!)

python - Python list += iterable 的行为是否记录在任何地方?

bool 运算的结果可以比较吗?

html - 使用 Perl 从 MySQL 填充下拉列表

c - 将数据读入列表节点

Perl 错误 - 全局符号需要显式包名称

python - 如何从 ttk.Treeview 小部件中清除项目?

c++ - 在 C++ 中初始化结构的语法是什么?

mysql - 如何使用 Perl 更改 mysql 密码

perl - 将文件句柄与 IO::Select::can_read() 返回的 glob 进行比较