Функция push
принимает массив, поэтому вы должны вернуть его обратно в массив:
push @{$TEST{TEST1}}, "some value";
Кроме того, ваш стиль заставляет меня думать, что вы не используете прагму strict
. Лучший способ написать этот код:
#!/usr/bin/perl
use strict;
use warnings;
sub atest {
my $test = shift;
push @{$test->{TEST1}}, "some value";
}
my %test;
atest(\%test);
use Data::Dumper;
print Dumper \%test;