Perl에서 단순 데이터 구조는 직접 이름으로 접근하는 스칼라, 배열 및 해시입니다. 참조는 다른 데이터 구조의 주소를 포함하는 스칼러입니다. 이는 중첩된 다차원 배열, 중첩 해시 및 복잡한 객체를 생성하는 데 필요합니다.
참조를 사용하는 예:
my %hash = ( foo => 1, bar => 2 ); my $ref = \%hash; print $ref->{foo}; # 1 # 해시에 대한 배열 참조 my @array = ( { name => "Tom" }, { name => "Jerry" } ); print $array[1]{name}; # Jerry
참조를 사용하지 않으면 예를 들어 다차원 배열을 만들 수 없습니다:
# 참조를 통한 다차원 배열 my $matrix = [ [1,2,3], [4,5,6] ]; print $matrix->[1][2]; # 6
이는 복잡한 데이터 구조를 구축하고 함수 간에 압축하여 전달하며 OOP 패턴을 구현할 수 있게 합니다.
참조를 사용하지 않고 중첩된 배열(또는 해시)의 요소에 접근할 수 있나요? 가능하다면 어떻게, 그리고 언제 작동하지 않을까요?
종종 불가능하다고 대답하지만, 실제로 Perl은 때때로 구조를 "자동으로" 변환합니다. 그러나 참조 없이는 즉석에서 만들거나 인수로 전달할 때 중첩 구조가 작동하지 않을 것입니다.
잘못된 접근과 올바른 접근 예:
# 이렇게는 작동하지 않습니다: my @arr = ( [1,2],[3,4] ); print $arr[0][1]; # 2 # 그러나 참조가 아닌 단순 배열로 선언하면: my @matrix = ( [1,2], [3,4] ); print $matrix[1][0]; # 3
역사
대규모 프로젝트에서 배열에 대한 참조를 \ 연산자 없이 전달하려고 했고, 결과적으로 내부 구조가 스칼라 배열처럼 펼쳐져서 로직이 완전히 깨졌습니다.
역사
개발자가 코드에서 참조를 사용하는 것과 사용하지 않는 것을 혼합하여 일부 데이터가 참조 배열을 다룰 때 중첩된 foreach 루프에서 손실되었습니다.
역사
구성 파일 작업 중 해시 참조를 통해 중첩되어 참조를 역참조하는 것을 잊고 해시처럼 접근하여 "Can't use string ("HASH(0x1234)") as a HASH" 런타임 오류가 발생했습니다.