Все, что используется в качестве хеш-ключа, является строковым. Поэтому при использовании вашего объекта в качестве хеш-ключа вы получаете только строковое представление о нем, а не сам фактический объект.
Реальный вопрос в том, почему в мире вы хотели бы сделать это?
Кроме того, синтаксис для присвоения значений хешу: $hash{key} = $val
; стрелка используется, когда вы имеете дело с хеш-ссылкой.
Если вы хотите связать объекты с каким-либо другим значением, одним из способов будет использование массива хэшей, например,
my @foo;
push @foo, { obj => MyClass->new( 1 ), val => 0 };
push @foo, { obj => MyClass->new( 2 ), val => 1 };
Тогда вы могли бы позвонить $foo[0]{obj}->get_value()
;
Если вы просто хотите, чтобы ваши объекты могли возвращать какой-то уникальный идентификатор для каждого экземпляра, вы можете добавить метод, который использует оператор Scalar :: Util's refaddr
:
use Scalar::Util 'refaddr';
sub unique_id {
my $self = shift;
return refaddr $self;
}
...
$hash{MyClass->new(1)->unique_id} = 0;
Для получения дополнительной информации: perlobj , perldata , perlreftut , Scalar :: Util