这在Perl 1中意味着什么.. $#something?

时间:2014-01-14 22:55:09

标签: perl

我有一个循环例如:

for my $something ( @place[1..$#thing] ) {

}  

我没有收到此声明1..$#thing

我知道#是用于评论但我的IDE不会将#thing作为评论。或者它真的只是一个评论让某人知道“$”中的内容是“thing”?如果这是一个评论,为什么该行的其余部分没有注释掉] ) {

如果它有其他含义,我想知道。对不起,如果我的问题听起来很奇怪,我只是对perl不熟悉并且被这样的表达困惑。

2 个答案:

答案 0 :(得分:14)

$#是获取相关数组的最高索引的语法,因此$#thing是数组@thing的最高索引。这在perldoc perldata

中有记录

..range operator1 .. $#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版本在写东西时可能会消耗大量内存   像这样:

http://perldoc.perl.org/perlop.html#Range-Operators