我有一个循环例如:
for my $something ( @place[1..$#thing] ) {
}
我没有收到此声明1..$#thing
我知道#是用于评论但我的IDE不会将#thing作为评论。或者它真的只是一个评论让某人知道“$”中的内容是“thing”?如果这是一个评论,为什么该行的其余部分没有注释掉] ) {
?
如果它有其他含义,我想知道。对不起,如果我的问题听起来很奇怪,我只是对perl不熟悉并且被这样的表达困惑。
答案 0 :(得分:14)
$#
是获取相关数组的最高索引的语法,因此$#thing
是数组@thing
的最高索引。这在perldoc perldata
..
是range operator,1 .. $#thing
表示数字列表,从1到@thing
的最高索引。
在@
sigill的数组括号内使用此列表表示这是一个数组 slice ,也就是说,@place
数组中选定数量的元素。
假设如下:
my @thing = qw(foo bar baz);
my @place = qw(home work restaurant gym);
然后@place[1 .. $#thing]
(或1 .. 2
)会扩展到列表work, restaurant
。
#
用于评论是正确的,但在这种情况下不是。
答案 1 :(得分:1)
这是你定义范围的方式。从起始价值到其他一些价值。
for my $something ( @place[1..3] ) {
# Takes the first three elements
}
Binary“..”是范围运算符,它实际上是两个不同的 运营商取决于具体情况。在列表上下文中,它返回一个列表 值从左到右计数(向上) 值。如果左边的值大于正确的值那么它 返回空列表。范围运算符对写入很有用 foreach(1..10)循环以及对数组执行切片操作。在里面 当前实现,范围时不会创建临时数组 运算符用作foreach循环中的表达式,但较旧 Perl版本在写东西时可能会消耗大量内存 像这样: