The simplest change is to wrap what you have in another while loop that reads the datafile in paragraph mode, and then open each multi-line dataset as an in-memory file.
That way your existing code can operate directly on that ramfile without change:
#!/usr/bin/perl
use warnings;
use strict;
use 5.010;
$/ = ''; ## paragraph mode
while( my $dataset = <DATA> ) {
## open each dataset as a ramfile
open DATASET, '<', \$dataset or die $!;
local $/ = "\n"; ## Return readline to by-line mode
my $counter = 0;
my $total_aligned_reads = 0;
my $mtDNA;
while (<DATASET>) {
## my $line = $_; #### Unnecessary; see next comment
next if /Data_Set_\d+: /;
next if /^NoCoordinateCount/;
next if /^$/;
my($chr, $lenLabel, $lengNumbers, $AlignedLabel, $alignedNumbe
+rs) = split /\s/; ####, $line; split operates on $_ by default
$total_aligned_reads += $alignedNumbers;
$mtDNA = $alignedNumbers if $chr eq "chrM";
}
say "total aligned reads = $total_aligned_reads";
say "mtDNA = $mtDNA";
say "mtDNA percentage = ", $mtDNA/$total_aligned_reads*100;
}
__DATA__
...sample data as above ...
Produces: C:\test>junk
total aligned reads = 14253
mtDNA = 2650
mtDNA percentage = 18.5925770013331
total aligned reads = 906
mtDNA = 1
mtDNA percentage = 0.11037527593819
total aligned reads = 538773
mtDNA = 169
mtDNA percentage = 0.0313675703867863
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
|