sub clone { my $self = shift; my $new = $self->SUPER::clone( @_ ); $new->set_ical( $self->get_ical ); $new; } sub clone { my $self = bless { %{ $_[0] } }, ref $_[0]; $self->{set} = $_[0]->{set}->copy; return $self; } sub copy { my $self = shift; my $copy = $self->empty_set(); ## return $copy unless ref($self); # constructor! foreach my $key (keys %{$self}) { if ( ref( $self->{$key} ) eq 'ARRAY' ) { @{ $copy->{$key} } = @{ $self->{$key} }; } else { $copy->{$key} = $self->{$key}; } } return $copy; }