use strict; use warnings; use Bio::FASTASequence::File; use File::Find::Rule; my @ffns = File::Find::Rule->file->name( '*.ffn' )->in( '.' ); my %result; my $output = 'org.fasta'; my $bff = Bio::FASTASequence::File->new; for my $ffn ( @ffns ) { my $parsed = $bff->file( $ffn ); for my $orga ( keys %{$parsed} ) { my $subsequence = substr $parsed->{$orga}->getSequence(), 3, 24; my ($name) = $parsed->{$orga}->getDescription() =~ m{ \[ (.*?) \] }x; push @{ $result{$name} }, $subsequence; } } open my $fh, '>', $output; for my $key ( sort keys %result ) { print $fh "> $key\n", join( '', @{ $result{$key} } ),"\n"; } close $fh;