2014-07-14 2 views
0

변수를 정규 표현식에 전달하려고 시도하는 TCL proc이 있는데 인식하지 못합니다.TCL 인수의 변수 RE

proc _findit {RE} { 
     if [ 
      regexp -all -nocase $RE $Line Match 
     ] { 
     #DO STUFF 
     } 
} 

_findit \sword\s 
+0

'$ Line'은 정의되지 않은 지역 변수입니다. '글로벌'이라고 선언하는 것을 잊었습니까? –

답변

4

도피가 _findit의 호출이 평가 될 때 제거되므로 RE 변수의 내용은 문자열이며 "swords"된다. 평가 인수에 대한 규칙을 포함 Tcl의 구문에 대한

_findit {\sword\s} 

문서는 here를 발견 : 백 슬래시를 인용 그래서 탈출을 보존합니다 중괄호의 패턴을 둘러싸보십시오.

당신은 명령 내에서 다음 줄을 추가 무엇을 당신의 인수는 호출 할 명령의 내부처럼 알아해야하는 경우 : 후,

puts [info level 0] 

이 명령 이름을 포함, 전체 인수 목록을 인쇄 호출이 평가되었습니다.

내가 조금 그 시간에 info level의 설명서에 의해 혼동되고 내가 쓴하는 것은 완전히 올바른 이해를 바탕으로하지 않은이 (그러나 다행히 대부분은 바로 어쨌든 나온 :

편집 info level의 사용을 명확히). 인수없이 호출 된 경우 info level은 현재 프로 시저 호출의 스택 수준 번호를 반환합니다. 인수 (숫자 여야 함)로 호출되면 숫자로 지정된 스택 레벨에 대한 호출 (이름 및 확장 인수)을 리턴합니다. 숫자가 0보다 큰 경우 절대 스택 수준으로 해석됩니다 (1은 최상위 수준에서 호출 한 프로 시저이고 2는 스택 수준 1에서 호출 한 프로 시저입니다). 1보다 작 으면 상대 스택 레벨로 해석됩니다 (0은이 프로 시저, -1은 호출자, -2는 호출자의 호출자 등). 따라서 [info level [info level]][info level 0]은 (모두 [info level]이 0이 아니더라도) 둘 다 다른 방식으로 현재 스택 수준을 나타내므로 동일한 결과를 제공합니다.

이 넘버링 방식과 유사한 0, -1, info level 0, 1, 2, 대 -2, ... up* 위해 작성되는 "상대"스택 레벨을 제외하고 upvaruplevel를 사용 "absolute"스택 레벨은 up*에 대해 info level 및 # 1, # 2, # 3, ...에 대해 1, 2, 3, ...이라고 쓰여집니다 (최상위 레벨을 # 0으로 지정할 수 있음).

문서 : info

+0

감사합니다. 이것은 정확히 내가 필요로하는 것입니다. "[info level [info level]]"제게 많은 것을 보여줍니다! – CK1