프로그래밍시니어 Perl 개발자

Perl에서 변수의 범위 작업의 특징에 대해 설명해 주세요. my와 local 연산자의 뉴앙스는 무엇인가요?

Hintsage AI 어시스턴트로 면접 통과

답변

Perl에서 변수의 범위는 mylocal 키워드로 정의됩니다.

  • my는 렉시컬 범위를 가진 변수를 만들며 (현재 블록에서만 유효함),
  • local은 글로벌 변수의 현재 값을 일시적으로 저장하고 블록의 생존 기간 동안 새로운 값을 설정합니다. 주로 글로벌 변수와 함께 사용됩니다 (예: $_, $/ 등).

예:

my $x = 42; # 현재 블록에서만 보임 { local $/ = undef; my $input = <STDIN>; # 여기서 $/는 undef이며, 블록 종료 후 원래 값으로 복구됨 }

예측 가능한 범위로 인해 my를 사용하는 것이 더 바람직합니다.

함정 질문

서로 다른 두 블록에서 선언된 동일한 변수에 대해 mylocal을 사용하면 어떻게 될까요?

흔히 localmy가 동일하게 작용한다고 대답하지만, 그렇지 않습니다. local은 글로벌 변수에만 작동합니다 (패키지 변수). my로 선언된 변수는 local에게는 보이지 않습니다.

예:

our $foo = "global"; { local $foo = "local"; print $foo; # "local" } print $foo; # "global" { my $foo = "lexical"; } # 블록 외부의 $foo는 글로벌 변수이며, "lexical"이 아님

주제에 대한 미숙지로 인한 실제 오류 사례


이야기

스크립트에서 my로 선언된 변수를 일시적으로 대체하기 위해 local을 사용했지만 아무 결과도 낳지 않았고, 내부 모듈에서 이벤트 처리에 버그를 초래했습니다.


이야기

프로젝트에서 foreach 내부에서 $_를 local로 “로컬화”했지만, foreach가 이미 새로운 $_를 설정한다는 것을 잊어버려서 필터가 작동하지 않고 잘못된 반복 로직을 초래했습니다.


이야기

패키지의 글로벌 변수가 our로 선언되지 않아 local $var로 로컬화를 시도했을 때 strict 및 warning으로 인해 스크립트가 중단되었고, 디버깅에 하루가 걸렸습니다.