use strict; use warnings; use feature 'say'; use Path::Tiny; local $/ = '>'; my $fh = path('./foo.fasta')->openr; while ( my $paragraph = <$fh> ) { chomp $paragraph; my @lines = split /\n/, $paragraph or next; my ( $identifier, $string ); for my $line ( @lines ) { if ( $line =~ /(sequence\d+)/ ) { $identifier = $1; } else { $string .= $line; } } say "$identifier\t$string"; } __END__