2010-11-24 1 views

답변

4

나는 그들이 여기에 머물러 있다고 생각합니다. 특히 코드 이탈이 그 중 하나입니다. 코드 도피는 우리와 함께 10 년 이상되었습니다.

예기치 않은 방식으로 코드를 호출 할 수있는 희소성이 use re "eval"에 의해 처리됩니다. 또한 정규식 정규식은 IIRC 5.12까지는 다시 사용할 수 없으므로 유용성이 제한 될 수 있습니다.

문자열 평가 버전 (??{ code })은 재귀를 수행하는 유일한 방법 이었지만, 5.10 이후에는 훨씬 더 좋은 방법이 있습니다. 속도 차이를 벤치 마크하면 대부분의 경우 평가 방법이 느려집니다.

대부분 블럭 평가 버전 (?{ code})을 사용하여 디버깅을 추가합니다. 이는 use re "debug"과 다른 granualarity에서 발생합니다. 그것은 막연하게 블록 보증 버전의 반환 값이 유용하지 않다는 것을 나에게 귀찮게했습니다. 입니다. 내가 알아 낸 전에

qr{ 
^(
     (\p{Decimal_Number}) 
     (?(?= (\d)) | $) 
     (?(?{ ord $3 == 1 + ord $2 }) (?1) | $) 
    ) $ 
}x 

: 그냥 숫자가 오른쪽으로 한 각 위치를 감소 된 숫자로 구성되었는지 여부를 테스트하기 위해이 패턴처럼 조건부 패턴의 테스트 일부로 사용했다 조건부를 사용하면 다음과 같이 작성했습니다.

qr{ 
^( 
     (\p{Decimal_Number}) 
     (?= $ | (??{ chr(1+ord($2)) })) 
     (?: (?1) | $) 
    ) $ 
}x 

이는 훨씬 효율적이지 않습니다.

역 추적 제어 동사가 최신 버전입니다. 나는 주로 일치의 가능한 모든 순열을 얻기 위해 그것들을 사용하며, 그게 단지 (*FAIL) 만 필요합니다. 나는 특히 "매우 실험적"이라고 표시된 (*ACCEPT) 기능이라고 생각합니다. 이것들은 5.10 이후로 우리와 함께했습니다.

+0

(? {ord $ 3 == 1 + ord $ 2}) : 정규식이 사실이 아니면 중지됩니까? –

+0

@sid_com :'(? 1)'브랜치라면 true, 그렇지 않으면'$'를 취합니다. – tchrist

관련 문제