Type class

package Chair::LazyBoy;
use base qw( Chair );

/* Alternatively type can register itself */
Chair->register_factory_type( lazy_boy   => __PACKAGE__ );

sub move {
    my ($self, $where) = @_;
    call_for_help();
    refuse() if !can_see_TV( $where );
}

1;