2014-02-12 86 views
6

我想知道是否有用於%+是運營商的名字,所以不是像代碼:是否有特殊變量%+的名稱?

/(?<CaptureName>\w+)/; 
... 
my $whatever=$+{CaptureName}; 

我可以用一些更有可讀性:

use English; 

/(?<CaptureName>\w+)/; 
... 
my $whatever=$?????{CaptureName}; 
+1

感謝大家提供的答案與寶貴的補充接受答案。我給你們每個人+1。 –

回答

7

使用English模塊,您可以參考一下吧爲%LAST_PAREN_MATCH

use English; 

/(?<CaptureName>\w+)/; 
... 
my $whatever = $LAST_PAREN_MATCH{CaptureName}; 
+0

謝謝澄清! –

6

perldoc -v %+

%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. 
6

你可以參考http://perldoc.perl.org/perlvar.html OM他的未來找出符號名。

在你的情況sylbe被稱爲LAST_PAREN_MATCH

%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. 

因此,如果您使用的是較舊的解釋,這可能會導致問題。

備註正如Keith指出的那樣,他在下面評論,你也可以使用perldoc -v '$+'。如果符號在您安裝的Perl版本上可用,這樣做的好處是隻能工作。

+3

或運行'perldoc perlvar'或'perldoc -v'$ +''。運行'perldoc'命令的優點是,它會向您顯示您系統中Perl版本的文檔,而不是恰好在網頁上記錄的版本。 –

+0

@KeithThompson,是的基思,這是一個很好的觀點。感謝您指出它。 – chollida

+1

如果您在舊版Perl中使用它,那麼缺少'%+'內置變量是您最擔心的問題。 **在5.10之前的Perl中,命名捕獲*不存在*(儘管事實上,在Perl 5.8,5.6中也存在魔術散列「%+」,也可能存在舊版本。如果有一個魔術變量'$ x',其中x是一個標點符號,那麼'@ x'和'%x' *必須*是一個未使用的魔術變量,它是一個未使用的魔術變量。存在,即使它們沒有任何用處。'$ +'存在,並且做了一些有用的操作,因此存在'%+'。) – tobyink

相關問題