Perl 特殊变量%+;是否有名称;?

Perl 特殊变量%+;是否有名称;?,perl,perlop,Perl,Perlop,我想知道%+是否有一个操作符名,所以不要像这样编写代码: /(?<CaptureName>\w+)/; ... my $whatever=$+{CaptureName}; /(?\w+)/; ... my$whatever=$+{CaptureName}; 我可以使用更具可读性的内容: use English; /(?<CaptureName>\w+)/; ... my $whatever=$?????{CaptureName}; 使用英语; /(?\w+)/;

我想知道
%+
是否有一个操作符名,所以不要像这样编写代码:

/(?<CaptureName>\w+)/;
...
my $whatever=$+{CaptureName};
/(?\w+)/;
...
my$whatever=$+{CaptureName};
我可以使用更具可读性的内容:

use English;

/(?<CaptureName>\w+)/;
...
my $whatever=$?????{CaptureName};
使用英语;
/(?\w+)/;
...
my$whatever=$?????{CaptureName};
使用该模块,您可以将其称为
%LAST\u PAREN\u MATCH

use English;

/(?<CaptureName>\w+)/;
...
my $whatever = $LAST_PAREN_MATCH{CaptureName};
使用英语;
/(?\w+)/;
...
my$whatever=$LAST\u PAREN\u MATCH{CaptureName};

您可以参考om he future查找符号名称

在你的例子中,这个sylbe被称为最后的配对

%LAST_PAREN_MATCH
%+
Similar to @+ , the %+ hash allows access to the named capture buffers, should they exist, in the last successful match in the currently active dynamic scope.
例如,$+{foo}在下列条件之后等于$1

我唯一要注意的是,这些文档包括:

This variable was added in Perl v5.10.0.
因此,如果您使用的是较旧的解释器,这可能会导致问题


注意正如基思在下面的评论中指出的,您也可以使用
perldoc-v'$+'
。只有在安装的Perl版本上有该符号时,此功能才有效。

或运行
perldoc-perlvar
,或
perldoc-v'$+'
。运行
perldoc
命令的好处是,它将向您显示系统中Perl版本的文档,而不是网页上碰巧记录的文档。@KeithThompson,是的,Keith,这是一个很好的观点。感谢您指出这一点。如果您在较旧版本的Perl中使用它,那么缺少
%+
内置变量是您最不担心的。5.10之前的Perl中不存在命名捕获!(尽管事实上,神奇的散列
%+
确实存在于Perl 5.8、5.6和可能更老的版本中。它根本不起任何作用-它是一个未使用的神奇变量。这是Perl解析器工作原理的一个人工制品。如果有一个神奇变量
$x
,其中x是标点符号,那么
@x
%x
必须存在,即使它们不做任何有用的事情。
$+
存在,并且做一些有用的事情,因此
%+
存在。)
This variable was added in Perl v5.10.0.