use overload '""' => \&as_string, '0+' => \&as_number; sub as_string { # Foo::Bar=HASH(0xDEADBEEF),tid=42 my $self = shift @_; return overload::StrVal( $self ) . ',tid=' . $self->tid; } sub as_number { return shift->tid; }