Perl中的特殊变量$-[0]和$+[0]分别代表什么意思?

9
我想知道Perl特殊变量$-[0]和$+[0]的含义。
我已经搜索了一下,发现$-代表页面上剩余的行数,$+代表最后一个与最后一个搜索模式匹配的括号。
但我的问题是,在正则表达式的上下文中,$-[0]和$+[0]是什么意思。
如果需要代码示例,请告诉我。

1
你有读过 perlvar 的 perldoc 吗?http://perldoc.perl.org/perlvar.html $+[0] 的例子非常清晰。 - J-16 SDiZ
5
你要寻找的变量是 @-@+ - flesk
3
我不知道为什么每当我问一些新手问题时,大家都会表现得那么严厉,并给我负面评价。我刚开始学习Perl,显然我不熟悉@-,我被分配了阅读一些现有的代码,但这些代码中没有@-,那么我怎么知道它呢?在提出这个问题之前,我已经花了一个小时搜索$-[0]并尝试自己理解代码。难道StackOverflow不是为新手而设立的吗? - AnonGeek
2
@raina77ow 我查了手册,但是像我之前提到的 $-[0] 没有匹配结果...不过,我明白你的意思。 - AnonGeek
3
+1 支持新手。我还记得第一次在子程序中看到 $_[0] 时,让我有点费解。 - Bill Ruppert
显示剩余2条评论
3个回答

14

请参阅perldoc perlvar,了解更多关于@+@-的内容。

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

$-[0]是上一次成功匹配的起始位置的偏移量。


8
这是一个数组中的元素(由方括号和数字表示),所以您要搜索 @-(该数组),而不是 $-(一个无关的标量变量)。
命令:
perldoc perlvar 

本文介绍了Perl语言的特殊变量。如果您在其中搜索@-,您将找到:

$-[0]表示上一次成功匹配的起始偏移量。$-[n]表示第n个子模式匹配的子字符串的起始偏移量,如果该子模式没有匹配,则为undef。


6

为了更好地理解$-[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

1
感谢您提供这个好例子。现在,@+ @- $- $+ 的概念对我来说已经非常清晰了。这将有助于未来的访问者。+1 - AnonGeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接