perl特殊变量$ - [0]和$ + [0]的含义是什么

时间:2012-06-25 09:48:42

标签: perl predefined-variables special-variables

我想知道perl特殊变量$-[0]$+[0]

的含义

我用Google搜索,发现$-表示页面上剩余的行数,而$+表示与上一个搜索模式匹配的最后一个括号。

但我的问题是$-[0]$+[0]在正则表达式的上下文中的含义。

如果需要代码示例,请告诉我。

3 个答案:

答案 0 :(得分:14)

请参阅perldoc perlvar关于@+@-

  

$+[0]是整个匹配结束字符串的偏移量。

     

$-[0]是上次成功比赛开始的偏移量。

答案 1 :(得分:8)

这些都是数组中的元素(用方括号和数字表示),所以你想搜索@ - (数组)而不是$ - (一个不相关的标量变量)。

推荐

perldoc perlvar 

解释了Perl的特殊变量。如果你在那里搜索@ - 你会发现。

$-[0] is the offset of the start of the last successful match. $-[n] is the offset of the start of the substring matched by n-th subpattern, or undef if the subpattern did not match

答案 2 :(得分:4)

添加示例以更好地了解$-[0]$+[0]

还在变量$+

上添加信息
use strict;
use warnings;

my $str="This is a Hello World program";
$str=~/Hello/;

local $\="\n"; # Used to separate output 

print $-[0]; # $-[0] is the offset of the start of the last successful match. 

print $+[0]; # $+[0] is the offset into the string of the end of the entire match. 

$str=~/(This)(.*?)Hello(.*?)program/;

print $str;

print $+;                    # This returns the last bracket result match 

输出:

D:\perlex>perl perlvar.pl
10                           # position of 'H' in str
15                           # position where match ends in str
This is a Hello World program
 World