필자는 Perl에서 스칼라 문맥으로 배열을 평가하는 것이 유용하다는 것을 알았다.Perl에서 해시를 스칼라 컨텍스트로 평가하는 이유는 무엇입니까?
하지만 실제로 스칼라 컨텍스트에서 해시를 평가할 수있는 용도는 무엇입니까? 예 :
my $scalar_value = %hash;
지금까지 내가 이해
scalar(%hash)
, 그것은 "3/4
"유용 것으로 보인다 해시의 내부에 대한 몇 가지 정보를 제공 같은 문자열을 생산 디버깅 용.
필자는 Perl에서 스칼라 문맥으로 배열을 평가하는 것이 유용하다는 것을 알았다.Perl에서 해시를 스칼라 컨텍스트로 평가하는 이유는 무엇입니까?
하지만 실제로 스칼라 컨텍스트에서 해시를 평가할 수있는 용도는 무엇입니까? 예 :
my $scalar_value = %hash;
지금까지 내가 이해 scalar(%hash)
, 그것은 "3/4
"유용 것으로 보인다 해시의 내부에 대한 몇 가지 정보를 제공 같은 문자열을 생산 디버깅 용.
해시가 비어 있는지 (키가 없는지) 알 수있는 TRUE/FALSE 플래그로 사용할 수있는 값을 생성합니다. 일례로서
:
if (%hash) {
print "Hash has elements\n";
} else {
print "Hash is empty\n";
}
if
때문에 부울 식 등 그 사용의 상황에 스칼라 표현을 강제.
if (@array) {
# NOT empty!
}
스칼라 (% 해시) 해싱 알고리즘이 제대로 작동하는지 확인할 수 있습니다 :
그것은 공허함을 테스트하는 스칼라 문맥에서 @array
를 사용하는 매우 유사한 개념이다. 만약 당신이 1,000 개의 키를 가지고 있고 2/16과 같은 것을 보게된다면 모든 키가 16 개의 할당 된 버킷 중 2 개만으로 해석된다는 것을 의미합니다. 즉, 모든 키가 매우 유사하고 충돌이 많이 발생하여 버킷에서 순차적 검색이 길어집니다.
기본 버킷 수는 8
perl -le '$h{a}=1;print scalar %h'
1/8
Prestash (2의 가장 가까운 전원) 1000 버킷 해시는 펄 OO에 대한 해시를 축복 할 때
perl -le 'keys(%h) = 1000;$h{a}=1;print scalar %h'
1/1024
이것은 또한 밖으로하는 데 도움이됩니다. 많은 키가 있다는 것을 안다면 속도를 높일 수 있습니다.
차이점은 무엇입니까? –
배열은'@'sigil이있는 변수이고,리스트는 소스 코드의 일련의 항목입니다. 이 코드에서'@array = (1, 2, 3)','(1, 2, 3)'은리스트이고'@ array'는 배열 변수입니다. perlfaq4에는 더 많은 정보가 들어 있습니다 : http://perldoc.perl.org/perlfaq4.html#What-is-the-difference-between-a-list-and-an-array? –
그러나'scalar (1,2,3,4)'를 쓸 수 없습니까? 그렇다면 "목록"이 진술에 근거하여 정확 했습니까? –