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 です。