use base qw(Root);
sub id {
- my ($self, $id) = @_;
- defined $id ?
- $self->{__PACKAGE__."id"} = $id :
- return $self->{__PACKAGE__."id"};
+ my ( $self, $id ) = @_;
+ defined $id
+ ? $self->{ __PACKAGE__ . "id" } = $id
+ : return $self->{ __PACKAGE__ . "id" };
}
sub seq {
- my ($self, @entries) = @_;
- if (@entries) { $self->{__PACKAGE__."seq"} = [ @entries ] }
- else {
- if (wantarray) {
- return defined $self->{__PACKAGE__."seq"} ?
- @{ $self->{__PACKAGE__."seq"} } :
- ();
- }
- else { return $self->{__PACKAGE__."seq"} }
- }
+ my ( $self, @entries ) = @_;
+ if (@entries) { $self->{ __PACKAGE__ . "seq" } = [@entries] }
+ else {
+ if (wantarray) {
+ return defined $self->{ __PACKAGE__ . "seq" }
+ ? @{ $self->{ __PACKAGE__ . "seq" } }
+ : ();
+ } else {
+ return $self->{ __PACKAGE__ . "seq" };
+ }
+ }
}
sub length {
- my ($self) = @_;
- return scalar @{ [ $self->seq ] };
+ my ($self) = @_;
+ return scalar @{ [ $self->seq ] };
}
#sub numeric {
# my ($self, $set) = @_;
-# return $set ?
+# return $set ?
# $self->{__PACKAGE__."numeric"} = $set :
# $self->{__PACKAGE__."numeric"};
#}
#}
sub sub_seq {
- my ($self, @segments) = @_;
-
- my $package = ref $self;
-
- return $self->seq unless @segments;
- confess "Passed an uneven number of segments" unless @segments % 2 == 0;
-
- {
- my %segments = @segments;
- # Find out if there are overlapping segments
- for my $pri (sort keys %segments) {
- for my $test (sort keys %segments) {
- next if $pri == $test;
- croak "Overlapping segments" if $test < $segments{$pri};
- }
- }
- }
-
- my @sections;
- my ($i, @seq) = (0, $self->seq);
- do {
- my ($start, $end) = @segments[$i, $i + 1];
-
- # Create a new sequence object in the correct package, and put the
- # segment into it
- my $new_seq = $package->new(id => $self->id);
- $new_seq->seq( @seq[ $start .. $end ] );
- push @sections, $new_seq;
- $i += 2;
- } while ($i < @segments);
-
- return @sections;
+ my ( $self, @segments ) = @_;
+
+ my $package = ref $self;
+
+ return $self->seq unless @segments;
+ confess "Passed an uneven number of segments" unless @segments % 2 == 0;
+
+ {
+ my %segments = @segments;
+
+ # Find out if there are overlapping segments
+ for my $pri ( sort keys %segments ) {
+ for my $test ( sort keys %segments ) {
+ next if $pri == $test;
+ croak "Overlapping segments" if $test < $segments{$pri};
+ }
+ }
+ }
+
+ my @sections;
+ my ( $i, @seq ) = ( 0, $self->seq );
+ do {
+ my ( $start, $end ) = @segments[ $i, $i + 1 ];
+
+ # Create a new sequence object in the correct package, and put the
+ # segment into it
+ my $new_seq = $package->new( id => $self->id );
+ $new_seq->seq( @seq[ $start .. $end ] );
+ push @sections, $new_seq;
+ $i += 2;
+ } while ( $i < @segments );
+
+ return @sections;
}
1;