Не мемоизировать выполнять глубокое копирование объектов в Perl?


Я разработал функцию, которая возвращает таблицу объектов. Содержание этих объектов еще не определено, но я хотел бы сделать глубокую копию между каждым вызовом (как в Java).

Как метод вернуть возвращаемое значение? Делает ли он глубокую копию этого? Ничто не говорит о том, как копируются ответы, прежде чем вернуться в справку модуля Memoize.

# How i solved the problem at first....
use Storable qw(dclone); 
my $saved_value ; # undef
sub get_all {
    return dclone($saved_value) if (defined $saved_value) ;
    ....
    $saved_value = dclone( $ans ) ;
    return $ans
}
1 3

1 ответ:

Попробуй и увидишь?

use Memoize;
sub foo { {bar=>[1..4]} }
memoize('foo');
foo()->{'bar'}[3] = 5;
print foo()->{'bar'}[3];

Печатает 5, поэтому он не делает глубокую копию. Я ухожу, чтобы посмотреть, делает ли он даже поверхностную копию в качестве упражнения.