1 package Trait::Selected; 2 3 use strict; 4 use warnings; 5 6 use Class::Trait 'base'; 7 8 our @REQUIRES = qw(id); 9 10 my $get_id = sub { 11 my $self = shift; 12 return sprintf "%s %d" => ref $self, $self->id; 13 }; 14 15 my %is_selected; 16 17 sub is_selected { 18 my $self = shift; 19 my $id = $self->$get_id; 20 $is_selected{$id} ||= 0; 21 return $is_selected{$id} unless @_; 22 $is_selected{$id} = shift; 23 return $self; 24 } 25 26 1;