2013-05-01 2 views
2

그래서 실험용 포함 코드 기능을 사용하는 정규식을 테스트했습니다. 테스트가 잘 진행되었으므로 좀 더 정교한 스크립트를 작성하도록 설명했지만 오류가 발생했습니다. 나는 임베디드 코드가 아닌 정규 표현식에서 변수를 사용하는 간단한 방법으로 오류를 추적했다. 제안 된 평가판에서 정규식을 수행하려고 시도했지만 eval'ed 정규식 후에 특수 변수에 액세스 할 수 없어 작동하지 않는다는 사실을 발견했습니다. 필자는 결국 임베디드 코드 전략을 사용하지 않는 코드를 다시 작성했지만 왜 작동하지 않는지 궁금해졌습니다. 이 작품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 인 경우 작동하도록 만드는 방법이 있습니까? 특수 변수를 사용할 수있는 방법은 무엇입니까?

$`, $&, $', and @- 

? eval을 사용해야합니까?

덕분에, 롭

+0

질문 하나를 사용하여 동일한 작업을 수행 할 수 있습니다 당신이 수행하는 서브 루틴이 왜 정확히 ['reverse'] (http://perldoc.perl.org/functions/reverse.html) 스칼라 컨텍스트에서합니까? '$ rev = reverse ($^N)'만 있으면됩니다. – TLP

+0

예. 나는 그것을 알고 있지만 그것을 지적 해 주셔서 감사합니다. 원래 제안한 코드가 있었지만 언급 한 것처럼 좀 더 정교한 코드를 테스트하고 있었고 다른 것을 한 후속 버전에서 sub를 호출하고 싶었습니다. 그래서 내가 시험에서 쓸모없는 서브를 만들었습니다. – hepcat72

답변

2

당신은

use re 'eval'; 

를 사용할 필요는 펄을 사용하면 패턴이 임의의 코드를 평가할 수 삽입하지 않고 있음을 인식하고 그와 확인 걸 알 수 있습니다. 어휘 적으로 범위가 지정되므로 파일의 정규 표현식이나 사용 된 곳에있는 일반 표현식에만 영향을 미칩니다. 당신이 한 줄을 가지고 있기 때문에

, 당신은 명령 줄 옵션을 마음에 오는

-Mre=eval 
+0

필자가 아는 한're 'eval'; '은 변수에 대한 액세스에 영향을 미치지 않으며 코드를 추가 할 때 코드가 잘 작동하므로 "무엇을 의미하는지"에 대해 더 명확히해야합니다. 특수 변수'$ \','$ &','$ ''및'@ - "를 사용할 수 있습니다. – ikegami

+0

나는 패턴 매치를 평가에서 랩핑했고, 그 변수의 결과 값은 쓰레기로 보였다. 분명히 그 오류가 내 코드에 "re reval"을 추가하라는 말을하는 것을 이해하지 못했습니다. 나는 그것이 정규식을 평가서로 감쌀 것을 제안하고 있다고 생각했다. – hepcat72

+0

@ hepcat72, 그럼 다 좋아? – ikegami

관련 문제