Thanks a lot
> You should probably make some of the slots weak.
of course, but ...
I hope this makes it clearer now:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
{ package Element;
use Moo;
has name => (is => 'ro');
has active_container => (is => 'rw');
}
{ package Container;
use Moo;
has elements => (is => 'ro', default => sub { [] });
sub add_elem {
my ($self, $element) = @_;
push @{ $self->elements }, $element
unless grep $_ == $element, @{ $self->elements };
}
sub get_elem {
my ($self, $name) = @_;
my $elem = (grep $_->name eq $name, @{ $self->elements })[0];
$elem->active_container($self);
return $elem
}
}
my $elem0 = 'Element'->new(name => 'one');
my ($cont1, $cont2) = map 'Container'->new, 1, 2;
$cont1->add_elem($elem0);
$cont2->add_elem($elem0);
my $elem1 = $cont1->get_elem('one');
say "OK" if $elem1->active_container == $cont1;
my $elem2 = $cont2->get_elem('one');
say "OK" if $elem2->active_container == $cont2;
print "Not OK" if $elem1->active_container != $cont1;
C:/Strawberry/perl/bin\perl.exe -w d:/tmp/pm/container_elem.pl
OK
OK
Not OK
Compilation finished at Fri Oct 8 17:48:07
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|