構文エラーの理由:
my @hash{1..4}=(1..4);
しかし、これではありません:
my %hash;
@hash{1..4}=(1..4);
my引数として、変数または括弧内の変数のリストが必要です。
@hash{1..4}
どちらでもないので
my @hash{1..4}
構文エラーです。
ハッシュスライスは何らかの結果を返す操作であるため、最初の例は失敗します。明らかに、my宣言でそれを付加することは、そうでないようなものを書くのと同じように、意味my 2+2がありません。my宣言するには、変数のリストが後に続く必要があります。
2番目の例はまさにそれを行います-現在のスコープでハッシュを宣言してから、そのスライスにアクセスします。