Сообщение об ошибке полностью правильно!;) Вам нужно «разыменовать» элемент в хеш, также вам нужно вызвать keys () в скалярном контексте, чтобы получить счетчик.
$ perl -wle 'use strict; my $href = { foo => undef }; $href->{foo} = (); print sclar keys $href->{foo}'
Type of arg 1 to keys must be hash (not hash element) at -e line 1, at EOF
Execution of -e aborted due to compilation errors.
против
$ perl -wle 'use strict; my $href = { foo => undef }; $href->{foo} = (); print scalar keys %{ $href->{foo} }'
0
Возможно, вы захотите использовать вместо этого хэш ref для $ self -> {_ вещи}, чтобы избежать случайного сглаживания списка и других проблем.
$ perl -wle 'use strict; my $href = { foo => undef }; $href->{foo} = { bar => 1 }; print scalar keys %{ $href->{foo} };'
1