Perl-해시

해시는 key/value한 쌍. 해시 변수 앞에는 백분율 (%) 기호가 있습니다. 해시의 단일 요소를 참조하려면 해시 변수 이름 앞에 "$"기호를 사용하고 그 뒤에 중괄호로 묶인 값과 관련된 "키"를 사용합니다.

다음은 해시 변수를 사용하는 간단한 예입니다.

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";

이것은 다음 결과를 생성합니다-

$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40

해시 만들기

해시는 다음 두 가지 방법 중 하나로 만들어집니다. 첫 번째 방법에서는 이름이 지정된 키에 하나씩 값을 할당합니다.

$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;

두 번째 경우에는 목록에서 개별 쌍을 가져와 변환 된 목록을 사용합니다. 쌍의 첫 번째 요소는 키로 사용되고 두 번째 요소는 값으로 사용됩니다. 예를 들면-

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

명확성을 위해 =>를 별칭으로 사용하여 다음과 같이 키 / 값 쌍을 나타낼 수 있습니다.

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

여기에 위의 형태의 변형이 하나 더 있습니다. 한 번보세요. 여기에서 모든 키 앞에 하이픈 (-)이 있고 그 주위에 따옴표가 필요하지 않습니다.

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

그러나 한 단어가 있다는 점에 유의하는 것이 중요합니다. 즉, 공백없이 키가 이러한 형태의 해시 형성에 사용되었으며 이러한 방식으로 해시를 구축하면 아래 표시된 대로만 하이픈을 사용하여 키에 액세스 할 수 있습니다.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

해시 요소 액세스

해시에서 개별 요소에 액세스 할 때 변수 앞에 달러 기호 ($)를 붙인 다음 변수 이름 뒤에 중괄호 안에 요소 키를 추가해야합니다. 예를 들면-

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

이것은 다음 결과를 생성합니다-

45
30
40

슬라이스 추출

배열에서 조각을 추출 할 수있는 것처럼 해시 조각을 추출 할 수 있습니다. 반환 값을 저장하려면 변수에 @ 접두사를 사용해야합니다.

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

이것은 다음 결과를 생성합니다-

Array : 45 30

키 및 값 추출

다음을 사용하여 해시에서 모든 키 목록을 가져올 수 있습니다. keys 다음 구문이있는 함수-

keys %HASH

이 함수는 명명 된 해시의 모든 키 배열을 반환합니다. 다음은 예입니다-

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

이것은 다음 결과를 생성합니다-

Lisa
John Paul
Kumar

마찬가지로 다음을 사용할 수 있습니다. values모든 값의 목록을 가져 오는 함수입니다. 이 함수에는 다음과 같은 구문이 있습니다.

values %HASH

이 함수는 명명 된 해시의 모든 값으로 구성된 일반 배열을 반환합니다. 다음은 예입니다-

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

이것은 다음 결과를 생성합니다-

30
45
40

존재 여부 확인

존재하지 않는 해시에서 키 / 값 쌍에 액세스하려고하면 일반적으로 undefined값이 있고 경고가 켜져있는 경우 런타임에 경고가 생성됩니다. 이 문제를 해결하려면exists 그 값이 무엇인지에 관계없이 명명 된 키가 존재하면 true를 반환하는 함수

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

여기에서 IF ... ELSE 문을 소개했으며, 별도의 장에서 공부할 것입니다. 지금은if( condition ) 주어진 조건이 참일 때만 부분이 실행됩니다. else부분이 실행됩니다. 따라서 위의 프로그램을 실행하면 주어진 조건 이 존재 하기 때문에 다음과 같은 결과가 생성됩니다 ($ data { 'Lisa'} 는 true를 반환합니다-

Lisa is 30 years old

해시 크기 얻기

키 또는 값에 스칼라 컨텍스트를 사용하여 크기, 즉 해시의 요소 수를 가져올 수 있습니다. 간단히 말해서 먼저 키 또는 값의 배열을 가져와야하며 다음과 같이 배열의 크기를 얻을 수 있습니다.

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

@values = values %data;
$size = @values;
print "2 - Hash size:  is $size\n";

이것은 다음 결과를 생성합니다-

1 - Hash size: is 3
2 - Hash size: is 3

해시에서 요소 추가 및 제거

간단한 할당 연산자를 사용하여 한 줄의 코드로 새 키 / 값 쌍을 추가 할 수 있습니다. 그러나 해시에서 요소를 제거하려면delete 예에서 아래 표시된 기능-

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size:  is $size\n";

# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size:  is $size\n";

이것은 다음 결과를 생성합니다-

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3