因此,我測試了一個使用實驗性嵌入式代碼功能的正則表達式。我的測試工作,所以我闡述了它做一個更復雜的腳本,但遇到了錯誤。我將錯誤追溯到正則表達式中的一個變量,而不是嵌入式代碼中。我嘗試在建議的eval中執行正則表達式,但發現這樣做不起作用,因爲我無法在eval的正則表達式之後訪問特殊變量。我最終重新編寫了代碼,不使用嵌入式代碼策略,但我仍然好奇爲什麼它不起作用。我在一對perl的簡化問題下面的俏皮話:如何使用嵌入式Perl代碼來評估正則表達式
這工作:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
while (/(.{10,41})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig {
print("$1\n")
}
sub r { return(join("",reverse(split("",$_[0])))) }'
那麼,爲什麼不這樣?:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
$f=10;
$e=41;
while (/(.{$f,$e})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig) {
print("$1\n")
}
sub r { return(join("",reverse(split("",$_[0])))) }'
我得到的錯誤是:
Eval-group not allowed at runtime, use re 'eval' in regex
m/(.{10,41})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ at -e line 1.
是否有辦法使它與$f
和$e
變量一起工作 - a方式允許我使用特殊變量
$`, $&, $', and @-
事後?我需要使用eval嗎?
感謝, 羅布
一個問題做同樣的事情,爲什麼你有一個子程序,它究竟是幹什麼的['reverse'] (http://perldoc.perl.org/functions/reverse.html)在標量環境中有用嗎? '$ rev = reverse($^N)'是你所需要的。 – TLP 2013-05-01 15:13:12
是的。我知道這一點,但謝謝指出。我原本有你所建議的代碼,但正如我所提到的,我正在測試一些更復雜的代碼,並且我想在後續版本中調用另一個子代。所以這就是爲什麼我在測試中創建無用的子。 – hepcat72 2013-05-01 19:10:26