For example, you can undef the model, but its destructor isn't called, as it's still referenced from the tables:
#!/usr/bin/perl use warnings; use strict; { package Myproject::Model::Table; use Moo; has name => (is => 'ro'); has model => (is => 'ro'); } { package Myproject::Model; use Moo; has table => (is => 'rw'); sub newtable { my ($self, $name) = @_; my $tob = 'Myproject::Model::Table'->new( name => $name, model => $self, ); $self->table or $self->table({}); $self->table->{$name} = $tob; } sub DESTROY { print "Good bye\n"; } } my $model = 'Myproject::Model'->new; $model->newtable('t1'); undef $model; # No destructor called here. use Data::Dumper; print Dumper $model;
To get the destructor called, you can modify the definition of the model attribute like this:
has model => (is => 'ro', weak_ref => 1);
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
In reply to Re: Keeping relationally child objects alive with Moo
by choroba
in thread Keeping relationally child objects alive with Moo
by anonymized user 468275
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |