package t::TestObj; use strict; use base qw( Tangence::Object ); use Tangence::Constants; sub new { my $class = shift; my %args = @_; my $self = $class->SUPER::new( %args ); for (qw( scalar array queue hash s_scalar )) { $self->${\"set_prop_$_"}( $args{$_} ) if defined $args{$_}; } return $self; } sub describe { my $self = shift; return (ref $self) . qq([scalar=) . $self->get_prop_scalar . q(]); } sub method_method { my $self = shift; my ( $ctx, $i, $s ) = @_; return "$i/$s"; } sub method_noreturn { my $self = shift; return; } sub init_prop_scalar { 123 } sub init_prop_hash { { one => 1, two => 2, three => 3 } } sub init_prop_queue { [ 1, 2, 3 ] } sub init_prop_array { [ 1, 2, 3 ] } sub add_number { my $self = shift; my ( $name, $num ) = @_; if( index( my $scalar = $self->get_prop_scalar, $num ) == -1 ) { $scalar .= $num; $self->set_prop_scalar( $scalar ); } $self->add_prop_hash( $name, $num ); if( !grep { $_ == $num } @{ $self->get_prop_array } ) { $self->push_prop_array( $num ); } } sub del_number { my $self = shift; my ( $num ) = @_; my $hash = $self->get_prop_hash; my $name; $hash->{$_} == $num and ( $name = $_, last ) for keys %$hash; defined $name or die "No name for $num"; if( index( ( my $scalar = $self->get_prop_scalar ), $num ) != -1 ) { $scalar =~ s/\Q$num//; $self->set_prop_scalar( $scalar ); } $self->del_prop_hash( $name ); my $array = $self->get_prop_array; if( grep { $_ == $num } @$array ) { my $index; $array->[$_] == $num and ( $index = $_, last ) for 0 .. $#$array; $index == 0 ? $self->shift_prop_array() : $self->splice_prop_array( $index, 1, () ); } } 1;