Perl에 Hash는 없다???
Perl에서 array는
my @array = (1,2,3,4,5,6);
과 같이 정의하고 @를 앞에 붙여준다.
반면 hash는
my %capitals= ('china' => 'beijing', 'england' => 'london');
과 같이 정의하고 %를 붙여준다.
그리고 사용법은
my $a = $capitals{'china'};
$key로 $value 값을 읽어오는 문법이니, 영락없이 Java의 Hash Class같은 놈으로 생각하고 만 있었다…..
(array of ($key -> $val )) : 즉 각각의 $val을 refer하는 $key의 array
하지만 오늘 회사에서 perl로 hash를 함수의 인자로 넘기는데, 안넘어 가는 것이었다.
sub getHash(%){
my %hash = %_;
while ( my ($key, $val) = each (%hash)){}
}
my %hash = %_;
while ( my ($key, $val) = each (%hash)){}
}
가 안되는 것이다.
책을 뒤져봤는데도 없었다.
왜일까???
정답은 모든 Array와 Hash를 출력하는 두개의 함수를 보면 알수 있다.
use strict;
sub printHash(@){
my %h = @_;
while ( my ($key, $val) = each (%h))
{
print $key, " => ", $val, "\n";
}
}
sub printArray(@){
my @a = @_;
print join("\n" , @a);
print "\n";
}
sub printHash(@){
my %h = @_;
while ( my ($key, $val) = each (%h))
{
print $key, " => ", $val, "\n";
}
}
sub printArray(@){
my @a = @_;
print join("\n" , @a);
print "\n";
}
그랬다. Perl에서 Hash는 Arrary 그 자체였다.
my %capitals= ('china' => 'beijing', 'england' => 'london');
my @capitals= ('china' , 'beijing' , 'england' , 'london' );
my @capitals= ('china' , 'beijing' , 'england' , 'london' );
즉 둘중 아무렇게나 선언한뒤
%capitals라 선언하고 @captitals처럼 사용해도 되고,
반대로 @captitals로 선언하고, 이후에 %capitals처럼 써도 된다.
하지만 후자처럼 사용할 경우, 홀수개의 인자를 가진 array를 hash처럼 사용했을때 어떤 sideeffect 가 있는지 알수 없음.
Perl하는 사람중에서 나만 몰랐던 내용인가???
넘 당연한 거였나???
암튼 재미난거 하나 알았다.