>>557 動作するけど、警告は出るよ。未定義値をリファレンスとみなしてデリファレンスした上、存在しないところに代入してるからね。普通そんな書き方しません。

$a{$ika} = {
hoge => $hoge,
hogehoge => qq(@hogehoge),
};
とか。
%a = (
$ika => {
 hoge => $hoge,
 hogehoge => qq(@hogehoge),
},
);
とか書きます。

$a{$ika}をいきなりハッシュとして扱いたい場合、
まず最初に
$a{$ika} = {};
と記述して生成しておくと(これは宣言ではありません)次から

$a{$ika}->{hoge} = $hoge;
$a{$ika}->{hogehoge} = qq(@hogehoge);
こうゆうふうに書いたり、

%{ $a{$ika} } = (
hoge => $hoge,
hogehoge => qq(@hogehoge),
);
こゆうふうに書いたりできます。

>アクセスされたので自動で存在しはじめたってことだ
違いますよ。「アクセスできなかった」からしょうがなく警告つきでく生成されただけです。