# 참조

PERL에서 참조는 다른 스칼라, 배열, 해시 등을 가리키는 스칼라 타입의 변수입니다. 참조는 스칼라 타입이기 때문에, 배열이나 해시의 구성 요소로 사용될 수 있으며, 이를 통해 다차원 배열 등 복잡한 자료 구조를 만들 수 있습니다.

참조하고자하는 변수 앞에 `\`를 붙이면 해당 변수에 대한 참조가 됩니다. 참조 변수에서 다시 일반 변수를 가져오려면 스칼라 형 앞에 `$`, 배열인 경우에는 `@`, 해시는 `%`, 서브루틴은 `&`를 붙여주면 됩니다.

```perl
my $var = 100;
my $var_ref = \$var;

$$var_ref = $$var_ref * 2; 

print "$var\n";
print "$$var_ref\n"; # 또는 ${$var_ref}
print "$var_ref\n";
```

참조 배열의 아이템에 접근하려면 `->[]`를 사용합니다.

```perl
my @array = (1..5);
my $array_ref = \@array;

my $i=0;
for (@$array_ref) {
    print "$$array_ref[$i]\n"; # 또는, $array_ref->[$i]
    $i++;
}
```

참조 해시의 아이템에 접근하려면 `->{}`를 사용합니다.

```perl
my %ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
my $ref = \%ages;

for (keys %$ref){
    print "$_ = $ref->{$_}\n";
}
```

## 익명 참조

참조할 변수를 생성하지 않고 직접 참조를 생성하는 것을 익명 참조라고 부릅니다. `()` 데신에 `[]`나 `{}`를 사용해서 선언합니다.

```perl
my $array_ref = [1..5];

my $hash_ref = {'Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22};
```

## 심볼릭 참조

심볼릭 참조를 사용하려면 `use strict` 옵션을 꺼야합니다.

```perl
my $ref = "var"; # var는 나중에 변수 이름으로 사용될 예정입니다.

$$ref = "Hello";

print "$var\n";
```