Я бы подумал о том, чтобы снова получить благословение. Когда у вас есть объект, вы не можете точно сказать, был ли он создан с использованием его конструктора (обычно Foo :: new ()), или кто-то благословил какой-то другой объект.
Проблема в том, что некоторые конструкторы толстые, это означает, что они делают намного больше, чем просто благословляют что-то:
sub new {
my $pkg = shift;
my ($required) = @_;
croak "Bad call" unless defined $required;
_do_something_magic ($required);
my $self = { 'foo' => $required };
return bless $self, $pkg;
}
В этом случае ваш повторно благословленный объект может быть не тем, который вы ожидаете позже в коде.
Можно рассмотреть конструкторы со встроенной функциональностью «благословения». Но такие «объектные преобразователи» сделают проект еще более сложным.
Придерживайтесь базового определения: «Объект является экземпляром класса. Навсегда».