날짜: 1996-04-07 | 글쓴이: 도아 | 7567 번 | 프린트 | 메일로보내기

제 7강 - 배열


보다 관심이 가는 변수는 이름을 갖는 리스트(Named List)인 배열(Array)이다. 배열 변수는 변수명이 @로 시작된다는 점만 제외하고는 스칼라 변수와 동일한 형식을 갖는다. 요약

@(at 기호)
전체 배열이나 배열의 일부분([ ]와 함께 사용할 때)을 참조한다.
$(dollar 기호)
[ ]와 함께 사용함으로서 배열의 한 요소를 참조한다.
설명

@food  = ("사과", "배", "장어");
@music = ("피리", "퉁소");
print "@food\n";
print "@music\n";

위의 문장은 세개의 요소를 배열, @food에 할당하고 두개의 요소를 배열, @music에 할당하는 문장이다.

배열은 0으로 시작하는 배열 첨자에의해 참조할 수 있으며, 대괄호가 배열첨자를 지정하는데 사용된다.

print "$food[2]\n";

위의 표현식은 장어을 리턴한다. 장어는 스칼라 이므로 @는 $로 변경된다. 배열할당

펄에서는 같은 표현식이라도 환경(스칼라, 배열)에따라 다른 결과를 만든다. 아래에서 첫번째 할당문은 두번째 할당문과 동일한 문장이 된다.

@moremusic = ("깽깽이", @music, "징");
print "@moremusic\n";
@moremusic = ("깽깽이", "피리", "퉁소", "징");
print "@moremusic\n";
배열추가

위 문장은 배열에 요소를 추가하는 방법을 제공한다. 배열에 요소를 추가하는 보다 산뜻한 방법은 다음 문장을 사용하는 것이다.

push(@food, "꼴뚜기");

이 문장은 꼴뚜기를 배열 @food의 끝에 추가한다. 두개 이상의 항목을 하나의 배열에 추가하기위해 다음 형식중 하나를 사용하면 된다:

push(@food, "꼴뚜기", "앵두");
print "@food\n";
push(@food, ("꼴뚜기", "앵두"));
print "@food\n";
push(@food, @morefood);
print "@food\n";

push 함수는 새로운 목록(배열)의 크기를 리턴한다. 배열제거

목록으로부터 마지막 항목을 제거하고 제거된 항목을 리턴받기위해 pop 함수를 사용한다. @food대해 pop 연산을 수행하면 pop 함수는 장어를 리턴하며, @food는 두개의 요소를 갖게된다:

$grub = pop(@food);    # $grub = "장어"
print "$grub, @food\n";

배열을 스칼라 변수에 할당하는 것도 가능하다. 역시 사용되는 환경이 중요하다.

$s = @food;
print "$s\n";

은 @food의 크기를 할당하지만

$f = "@food";
print "$f\n";

은 각 요소 사이를 공백으로 채운 문자열을 리턴한다. 이 공백은 특수 변수 $"의 값을 변경함으로서 임의의 다른 문자열로 대치할 수 있다. 이 변수는 펄의 주요 특수 변수중의 하나이며, 가장 이상한 이름을 가지고 있다. 스칼라 변수의 다중 할당

배열은 스칼라 변수를 다중 할당하는데에 사용될 수도 있다:

$c = 'kiwi';
$d = 'orange';
($a, $b) = ($c, $d);		# $a=$c; $b=$d;와 동일
print "$a, $b\n";
($a, $b) = @food;		# $a와 $b에 @food의 처음 두 항목을 할당
print "$a, $b\n";
($a, @somefood) = @food;	# $a는 @food의 첫번째 항목
				# @somefood는 나머지 목록
print "$a, @somefood\n";
(@somefood, $a) = @food;	# @somefood는 @food
				# $a는 정의되지 않음
print "@somefood, $a\n";

마지막 할당문에서 배열의 크기는 자동조절되며 따라서 @somefood는 @food 만한 크기로 증가하기때문에 발생한다. 따라서 위와같은 형식은 절대 피해야 한다. 마지막 배열첨자

마지막으로 목록의 마지막 배열첨자는 다음과 방법을 이용해서 찾을 수 있다. 이 마지막 배열첨자를 이용하면 배열의 크기를 알 수 있으며, 배열에 데이터를 추가 삭제할 수 있다.

print $#food + 1, "\n";
$#food = 2; 			# 배열의 크기를 3으로 만듬. 
				# 마지막 배열 요소는 사라짐.
print "@food\n";
$food[$#food+1] = '육계장';	# 배열의 끝부분에 '육계장'을 추가
배열의 출력

환경이 중요하므로 다음의 모든 코드가 서로다른 결과를 만드는 것에 놀라지 말기 바란다:

print @food;		# 배열자체
print "@food";		# 큰 따옴표로 인용
print @food."";		# 스칼라 변수 환경
배열관련 함수
push(@ARRAY,LIST)

@ARRAY의 끝에 LIST를 추가한다. @ARRAY의 크기를 리턴한다. pop(@ARRAY)

@ARRAY의 마지막 요소를 제거하고 제거한 마지막 요소를 리턴한다. unshift(@ARRAY,LIST)

@ARRAY의 앞 부분에 LIST를 추가한다. @ARRAY의 크기를 리턴한다. shift(@ARRAY)

@ARRAY의 첫 번째 요소를 제거하고 제거한 첫 번째 요소를 리턴한다. scalar(@ARRAY)

@ARRAY 요소의 수를 리턴한다. splice(LISTNAME, REMOVEOFFSET, REMOVENUMBER, ADDLIST)

REMOVEOFFSET 지정한 배열첨자부터 REMOVENUMBER로 지정된 배열첨자까지에 ADDLIST를 더한다. REMOVENUMBER를 0으로 지정하면 배열을 제거하지않고 삽입만 하며, ADDLIST를 Null 리스트로 지정하면 지정된 만큼 배열요소를 삭제한다.

@nums1 = (1..5);
@nums2 = (1..5);
@nums3 = (1..5);
splice(@nums1, 3, 1, ('개', '소'));
splice(@nums2, 3, 0, ('개', '소'));
splice(@nums3, 3, 1, ());
$" = '::';
print "@nums1\n";	# 결과는 1::2::3::개::소::5
print "@nums2\n";	# 결과는 1::2::3::개::소::4::5
print "@nums3\n";	# 결과는 1::2::3::5


다음글: 제 8강 - Split (5896)1996-04-08
이전글: 제 6강 - 리스트 (7668)1996-04-06

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.