의 기준 조각화 나는 다음과 같은지도가 내 코드에서배열
my %cps_per_level = (
Bronze => [100 , 65 ],
Silver => [200 , 125 ],
Gold => [400 , 250 ],
Platinum => [800 , 500 ],
Diamond => [1200, 750 ],
Master => [2000, 1200],
Grandmaster => [3000, 1750],
);
내가 두 변수에 대한 특정 항목에 대한 목록의 두 값을 모두 싶어합니다. 첫 번째 시도는 특정 항목에 대한 목록의 참조를 해제 한 다음 목록 슬라이스를 적용하고이를 아래에 표시된 것과 같이 원하는 변수에 할당하는 것이 었습니다. 여기 $level
에는지도의 키가 하나 있습니다.
my ($cps_before, $cps_after) = $cps_per_level{$level}[0,1];
하지만 작동하지 않습니다. $cps_before
은 목록의 첫 번째 값을 가져 오지만 $cps_after
은 가져 오지 않습니다. 나는 이것을 2 줄로 작성하여 작동되도록했습니다 :
my $cps_before= $cps_per_level{$level}[0];
my $cps_after = $cps_per_level{$level}[1];
제 질문은 왜 슬라이스가 작동하지 않았습니까? 나는 무엇을 놓치고 있습니까?
는 답변에 대한 감사를 알았어요. 내가보기에 당신은'@ {...} '로리스트를 디 - 레퍼런스 (de-reference) 한 다음,리스트의 디 - 레퍼런스 된 버전에 슬라이스를 적용한다. 이것은 완벽하게 이해할 수있다. 내 실수는'->'(그리고 문법 설탕 버전'{...} [...]')이'$ {thing_to_derefence} [.]가 아닌 자동으로 모든 것을 참조 해제한다고 생각하는 것입니다. ..]'. –
@ AndréSantos'@'와'[]'는 별도의 구문이 아닙니다. '@ ... []'은 배열 슬라이스의 구문입니다. '(...) []'라고 쓰여진리스트 슬라이스 연산자도 있습니다. 그러나'[]'의 첨자는 모두 단독으로 사용할 수 없습니다. 항상 더 큰 구조의 일부입니다. – melpomene