perldocより
以下の違いを考えてみてください。 CASE 0 は、CASE 1 を短くしたものであり、CASE 2 を 短くしたものでは ありません:
# CASE 0 $$hashref{"KEY"} = "VALUE"; # $hashrefはリファレンスで特定のハッシュを指していてその"KEY"キーの値をデリファレンスしている # $hashref->{"KEY"}と同じ # CASE 1 ${$hashref}{"KEY"} = "VALUE"; # CASE0を極端に表した例 ^^ # CASE 2 ${$hashref{"KEY"}} = "VALUE"; # %hashrefが存在していて、その"KEY"キーの値はリファレンスで、それをデリファレンスしている ^ ^ # CASE 3 ${$hashref->{"KEY"}} = "VALUE"; # $hashref->{"KEY"}の値がリファレンスで、それをデリファレンスしている
CASE 2 もまた間違えやすいもので、%hashref という変数にアクセスするものです。 $hashref を仲介して、それが指すことになっているハッシュを デリファレンスしているものではありません。 それは、CASE 3 です。