В этой строке кода:
my %myhash = $self->{properties};
% myhash - это хеш, тогда как $ self -> {properties} - это хеш ссылка . Таким образом, вы фактически возвращаете хеш с одной парой ключ / значение, где ключ является ссылкой на хеш, а значение равно undef.
Если вы действительно хотите вернуть хеш, сделайте следующее:
my %myhash = %{$self->{properties}};
Либо верните ссылку на хеш. Как правило, это предпочтительнее, чем возвращать хэш, поскольку он не создает копию исходного хэша и, следовательно, эффективнее использует память, поскольку хэш увеличивается. Вот как это выглядит:
sub getProperties {
my $self = shift;
return $self->{properties};
}
Тогда в вашем коде вызова вместо этого:
my %properties = $properties->getProperties();
$somevalue = $properties{'somekey'};
сделать это:
# getProperties returns a reference, so assign to a scalar
# variable ($foo) rather than a hash (%foo)
my $properties = $properties->getProperties();
# Use -> notation to dereference the hash reference
$somevalue = $properties->{'somekey'};