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