본문 바로가기
Programming/Perl

Perl 연상배열

by NAMP 2009. 4. 8.

2차원 배열 / 연상배열 / 조합배열 - 2009/04/08

리스트를 이용하여 스왑(SWAP)

($a,$b)=($b,$a);

  1. $a=10;
  2. $b=20;
  3.  
  4. ($a,$b)=($b,$a);
  5.  
  6. print $a.$b;

 

해시의 해시

  1.  
  2. %hash_list=(
  3. language=>{p=>"perl",c=>"c",r=>"ruby"},
  4. teacher=>{l=>"lvuno",z=>"zesrever",m=>"monsterpk"},
  5. education=>{one=>401,two=>405,three=>206},
  6. );
  7.  
  8. print "$hash_list{language}->{p}\n";
  9. print "$hash_list{teacher}{z}\n";
  10. print "$hash_list{education}->{one}\n";
  11. print "$hash_list{language}\n";

 

 

2차원 배열

  • 펄은 단순히 1차원 배열만 제공
  • 2차원 배열을 구현하기 위해서는 레퍼런스를 이용해야 한다. 
  1. @a = (
  2. [10,20],
  3. [30,40],
  4. );

 

 

  1. @a = ([1,2,3,4],
  2. [5,6,7,8],
  3. [9,1,2,3],);
  4.  
  5. foreach $x (0..2) {
  6. foreach $y (0..3) {
  7. print "$a[$x][$y]";
  8. }
  9. print "\n";
  10. }
  11. print "$a[2][1]\n";
  12. print "$a[1]->[1]\n";
  13. print "$a[0]->[0]\n";
  14.  
  15. $b=[1,2,3,4];
  16. $c=1;
  17. print \$c."\n";
  18. print \$b."\n";
  19. print \@a."\n";

 

무명배열 / 무명해시 

$a = [200,300,400,500]


$a [무명배열의 주소 값을 갖는다.]

$$a[0] 는  200의 값을 갖는다. 


 

  1. $a = [200,300,400,500];
  2. $b = {"one"=>1,"two"=>2,"three"=>3};
  3. print "$a, $$a[0], $$a[1]\n";
  4. print "$b, $$b{one}, $$b{three}\n";

 


 

  1. $a = [200,300,400,500];                  # 위와 같은 코드 # 

    $b = {"one"=>1,"two"=>2,"three"=>3};

    print "$a, $a->[0], $a->[1]\n";

    print "$b, $b->{one}, $b->{three}\n";


 

 

Typeglob 란?

perl에서는 변수나 배열, 연상배열 등 같은 이름을 붙일 수 있다. 

같은 이름의 변수나 배열 등을 하나로 묶어서 다루는 것. 

*a = ($a,@a,%a)


 

  1. $a = 100;
  2. @a = (200,300);
  3. %a = ("num1"=>400,"num2"=>500);
  4. print "$a\n";
  5. print "@a\n";
  6. print "$a{num1}\n";
  7. print "="x20 ."\n";
  8. *all=*a;
  9. print"$a\n";
  10. print"$a[1]\n";
  11. print"$a{num2}\n";

 

조합 배열 (Hash)  - '%' 문자와 배열의 이름으로 구성

키와 값을 한 세트로 설정.

  1. %조합배열명 = ( key1, data1, key2, data2, key3, data3);         # ; 꼭 있어야 함.
  2. %조합배열명 = ( key1=>data1, key2=>data2, key3=>data3);        

Reference 란?

메모리의 한 지점의 주소값을 가지는 변수 

<하드 링크>

\$a = 변수 $a의 주소값

\@b = 배열 @b의 주소값

 

print "=" x 20;      #  줄 긋기

 

 

$$a = 변수 $a가 들어있는 주소값을 참조한다. 


 

 

  1. $a = 100;                                #스칼라변수
  2. @b=(200,300);                            #배열            
  3. %c=("num1"=>400,"num2"=>500);
  4. print"$a\n";
  5. print"@b\n";
  6. print"$c{'num1'}\n";
  7. $refera=\$a;                            # 래퍼런스 화.
  8. $referb=\@b;
  9. $referc=\%c;
  10. print"$refera,$referb,$referc\n";
  11. print"$$refera,$$referb[0],$$referc{'num2'}\n";        # 디 래퍼런스 화. 

 

심볼릭 레퍼런스/ 소프트 레퍼런스

  1. $sym=10;
  2. $resym="sym";
  3. print $$resym;

 

조합배열

접근할때는 스칼라 값으로 접근한다. 

$Hash{"Name"}

  1. %Hash = (
  2. "Name" => "Lee",
  3. "Age" => 23,
  4. "Job" => "Research Engineer",
  5. );

조합배열을 이용한 출력 코드

  1. %hash=(
  2. "Name"=>"Lee",
  3. "Age"=>23,
  4. "Job"=>"Research Engineer",
  5. );
  6. print "Name : $hash{'Name'}\n";                     #스칼라값으로 접근한다. 
  7. print "Age : $hash{'Age'}\n";
  8. print "Job : $hash{'Job'}\n";

 


연상배열에 관한 함수

[함수명] 설명

배열 = keys 연상배열          # 연상배열의 모든 키를 구해서 배열에 저장

배열 = value 연상배열         # 연상배열의 모든 값을 구해 배열에 저장

(값, 값) = each 연상배열    #  배열의 마지막 요소에 변수의 값을 추가로 저장

변수 = exists 배열{키}        # 연상배열의 키가 존재하는 경우 변수에 1을 저장, 존재하지 않는 경우에는 undef를 저장.


@b = keys %a;      # 연상배열의 모든 키를 구해서, 배열에 저장한다.

  • @b = value %a;     #  연상배열의 모든 값을 구해서 배열에 저장한다.
  1. while (($k, $v) = each %a) {
  2. ...
  3. }                    # 연상배열로부터 키와 값을 한 쌍씩 가져온다. 

  1. $key = "name"
  2. $b = exists $a{$key};

연상배열에 키가 존재하는 경우는 1, 존재하지 않는 경우는 undef를 변수 $b에 저장.


 

이 글은 스프링노트에서 작성되었습니다.

'Programming > Perl' 카테고리의 다른 글

do  (0) 2009.04.10
Perl 제어문  (0) 2009.04.09
Perl 배열 / 연산자  (0) 2009.04.07
pl - Strawberry Perl 설치하기  (2) 2009.04.06
ActivePerl 설치하기  (0) 2009.04.05

댓글