push @{ $data{'digits'} }, 4;
$ data {'digits'} возвращает ссылку на массив. Поместите @ {} вокруг него, чтобы «разыменовать его». Таким же образом,% {} будет разыменовывать ссылку на хеш, а $ {} - скалярную ссылку.
Если вам нужно поместить что-то в хеш-ссылку, то есть
$hashref = { "foo" => "bar" }
Вы можете использовать либо:
${ $hashref }{ "foo2" } = "bar2"
или стрелка-обозначение:
$hashref->{"foo2"} = "bar2"
Определенным образом представьте, что ссылка - это то же самое, что и имя переменной:
push @{ $arrayref }, 4
push @{ "arrayname" }, 4
push @arrayname , 4
На самом деле, это и есть "мягкие ссылки". Если у вас не включены все строгости, вы можете буквально:
# perl -de 0
DB<1> @a=(1,2,3)
DB<2> $name="a"
DB<3> push @{$name}, 4
DB<4> p @a
1234