리스트는 변수가 아니다.
리스트는 배열이나 해시 변수에 대입되기 위해 잠깐 생성되는 데이터 값이다.
그래서 배열을 선언하는 구문과 해시를 선언하는 구문이 같은 것이다.
"리스트"와 "배열"이라는 단어를 서로 바꿔서 써도 상관없는 경우는 많다.
하지만 그런 경우만큼 또 미묘하게 다르고 완전히 헷갈리게 동작하는 경우도 많다.
자 어쨌든,
=>
는 ,
의 다른 형태일 뿐이라는 점을 기억하면 된다.이 리스트는 빈 배열을 선언할 때에도 빈 해시를 선언할 때에도 사용할 수 있으며
perl
인터프리터가 어느 쪽인지 알 수 있는 방법은 없다.이런 특이한 측면을 이해한다면,
리스트는 중첩할 수 없다고 할 수밖에 없는 이유도 이해할 수 있을 것이다.
다음을 시도해 보면:
my @array = (
"apples",
"bananas",
(
"inner",
"list",
"several",
"entries",
),
"cherries",
);
펄은
("inner", "list", "several", "entries")
를 배열로 봐야할지 해시로 봐야할지 결정할 수 없다.그래서 펄은 어느쪽도 아니고 리스트를 하나의 긴 리스트로 펼쳐버린다:
print $array[0]; # "apples"
print $array[1]; # "bananas"
print $array[2]; # "inner"
print $array[3]; # "list"
print $array[4]; # "several"
print $array[5]; # "entries"
print $arrya[6]; # "cherries"
이건 뚱뚱한 쉼표를 써도 마찬가지이다:
my %hash = (
"beer" => "good",
"bananas" => (
"green" => "wait",
"yellow" => "eat",
),
);
# 위의 경우 경고(warning)가 발생한다. 해시가 7개의 요소로 선언되기 때문이다
print $hash{"beer"}; # "good"
print $hash{"bananas"}; # "green"
print $hash{"wait"}; # "yellow"
print $hash{"eat"}; # undef, 그래서 ""가 출력되고 경고가 발생한다
물론, 이 점을 이용하여 여러 배열을 간단하게 합칠 수 있다:
my @bones = ("humerus", ("jaw, "skull"), "tibia");
my @fingers = ("thumb", "index", "middle", "ring", "little");
my @parts = (@bones, @fingers, ("foot", "toes"), "eyeball", "knuckle");
print @parts;
my @fingers = ("thumb", "index", "middle", "ring", "little");
my @parts = (@bones, @fingers, ("foot", "toes"), "eyeball", "knuckle");
print @parts;
'Script > Perl' 카테고리의 다른 글
10. conditional sentence (0) | 2020.01.21 |
---|---|
09. string (0) | 2020.01.21 |
07. Hash (0) | 2020.01.21 |
06. Array Function (0) | 2020.01.21 |
05. Scalar Data (0) | 2020.01.21 |