그래서 실험용 포함 코드 기능을 사용하는 정규식을 테스트했습니다. 테스트가 잘 진행되었으므로 좀 더 정교한 스크립트를 작성하도록 설명했지만 오류가 발생했습니다. 나는 임베디드 코드가 아닌 정규 표현식에서 변수를 사용하는 간단한 방법으로 오류를 추적했다. 제안 된 평가판에서 정규식을 수행하려고 시도했지만 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을 사용해야합니까?
덕분에, 롭
질문 하나를 사용하여 동일한 작업을 수행 할 수 있습니다 당신이 수행하는 서브 루틴이 왜 정확히 ['reverse'] (http://perldoc.perl.org/functions/reverse.html) 스칼라 컨텍스트에서합니까? '$ rev = reverse ($^N)'만 있으면됩니다. – TLP
예. 나는 그것을 알고 있지만 그것을 지적 해 주셔서 감사합니다. 원래 제안한 코드가 있었지만 언급 한 것처럼 좀 더 정교한 코드를 테스트하고 있었고 다른 것을 한 후속 버전에서 sub를 호출하고 싶었습니다. 그래서 내가 시험에서 쓸모없는 서브를 만들었습니다. – hepcat72