global — 전역 변수 접근
global — 전역 변수 접근
프로시저 안에서 전역 변수를 쓰려고 하는데 그냥 이름만 적으면 로컬 변수가 돼 버려요. 그때 global로 전역 변수와 연결하면 되는 거예요.
본문
시그니처
global ?varname ...?
global은 proc 몸통 안에서 실행될 때만 효과가 있어요. proc 몸통 안에서 실행되면 지정한 이름의 로컬 변수를 대응하는 전역 변수에 연결해요. 이렇게 연결된 변수는 upvar로 만든 변수처럼 info locals가 반환하는 목록에 포함되지 않아요.
varname에 네임스페이스 한정자(:: 구분)가 있으면 로컬 변수의 이름은 namespace tail로 결정한 전역 변수의 비한정 이름이 돼요.
varname은 항상 변수의 이름으로 취급돼요. a(b)처럼 배열 요소처럼 보이는 이름을 주면 오류가 나요.
예제
네임스페이스 변수 ::a::x를 설정하는 프로시저:
proc reset {} {
global a::x
set x 0
}
global a::x가 ::a::x를 로컬 이름 x로 연결해 주고, set x 0으로 그 값을 바꿔요.
전역 버퍼에 문자열을 쌓아 두는 프로시저 — 메시지를 조각조각 만들었다가 한 번에 전송하고 싶을 때 유용해요(socket으로 연 연결이나 HTTP 응답처럼):
proc accum {string} {
global accumulator
append accumulator $string \n
}