Sunday, June 03, 2007
Perl Reference, 펄 레퍼런스, C언어의 포인터(Pointer)에 해당
펄에도 C의 포인터에 해당하는 것이 있는데, 레퍼런스(Reference)라고 합니다. C의 포인터가 어렵고 헷갈리듯이, 펄의 레퍼런스도 상당히 복잡합니다.
백슬래쉬(Backslash)문자인 \ 를, 배열이나 변수명 앞에 붙이면, 그 배열 또는 변수의 레퍼런스가 반환됩니다. 즉 주소를 구할 수 있습니다.
다음 예제는, "배열의 레퍼런스를 구하고", "레퍼런스로 배열의 각 요소에 접근하고", "함수 인수로 레퍼런스를 넘기고", "함수 내에서 레퍼런스를 처리"하는 방법입니다.
소스 파일명: ref.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
백슬래쉬(Backslash)문자인 \ 를, 배열이나 변수명 앞에 붙이면, 그 배열 또는 변수의 레퍼런스가 반환됩니다. 즉 주소를 구할 수 있습니다.
다음 예제는, "배열의 레퍼런스를 구하고", "레퍼런스로 배열의 각 요소에 접근하고", "함수 인수로 레퍼런스를 넘기고", "함수 내에서 레퍼런스를 처리"하는 방법입니다.
Perl 레퍼런스 기초 예제
소스 파일명: ref.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
my @a = qw( 자장면 탕수육 물만두 팔보채 );
my $r = \@a; # 배열 @a의 현재 메모리 주소 대입
print $r, "\n";
# 출력: ARRAY(0x1625d24)
# 시스템 상황에 따라 다른 주소가 출력됨
# 레퍼런스로 배열 전체에 접근 (Dereferencing)
print join("/", @{$r}), "\n"; # 출력: 자장면/탕수육/물만두/팔보채
# 또는
print join(">>", @$r), "\n"; # 출력: 자장면>>탕수육>>물만두>>팔보채
# 레퍼런스로 각 배열 요소에 접근하기
print ${$r}[0], "\n"; # 원본 배열의 0번째 요소에 접근하여 출력
# 자장면
# 또는
print $$r[0], "\n"; # 원본 배열의 0번째 요소에 접근하여 출력
# 자장면
##############################################################
# 위에서 정의한 배열 레퍼런스를
# 함수 인수로 넘기기 (Parameter Passing)
print_array(@{$r});
print "\n"; # 편의상 줄바꿈
# 출력 결과: [자장면] [탕수육] [물만두] [팔보채]
# 또는
print_array2(\@a);
print "\n"; # 편의상 줄바꿈
# 출력 결과: <자장면> <탕수육> <물만두> <팔보채>
sub print_array {
print "[$_] " foreach (@_);
}
sub print_array2 {
my $temp = shift;
print "<$_> " foreach (@{$temp});
}
use strict; use warnings;
my @a = qw( 자장면 탕수육 물만두 팔보채 );
my $r = \@a; # 배열 @a의 현재 메모리 주소 대입
print $r, "\n";
# 출력: ARRAY(0x1625d24)
# 시스템 상황에 따라 다른 주소가 출력됨
# 레퍼런스로 배열 전체에 접근 (Dereferencing)
print join("/", @{$r}), "\n"; # 출력: 자장면/탕수육/물만두/팔보채
# 또는
print join(">>", @$r), "\n"; # 출력: 자장면>>탕수육>>물만두>>팔보채
# 레퍼런스로 각 배열 요소에 접근하기
print ${$r}[0], "\n"; # 원본 배열의 0번째 요소에 접근하여 출력
# 자장면
# 또는
print $$r[0], "\n"; # 원본 배열의 0번째 요소에 접근하여 출력
# 자장면
##############################################################
# 위에서 정의한 배열 레퍼런스를
# 함수 인수로 넘기기 (Parameter Passing)
print_array(@{$r});
print "\n"; # 편의상 줄바꿈
# 출력 결과: [자장면] [탕수육] [물만두] [팔보채]
# 또는
print_array2(\@a);
print "\n"; # 편의상 줄바꿈
# 출력 결과: <자장면> <탕수육> <물만두> <팔보채>
sub print_array {
print "[$_] " foreach (@_);
}
sub print_array2 {
my $temp = shift;
print "<$_> " foreach (@{$temp});
}
tag: perl
Perl | 펄
<< Home