my $inputfile = 'Ath_orig.fa';
my $outputfile = 'Ath_tybalt_shuffle.fa';
the specified output file was created, BUT it was empty.
So I tried to modify your script very slightly to file handle syntax I am most familiar with, as follows, but here too the output file specified was empty. Not sure what I am doing wrong....
#!/usr/bin/perl
#tybalt89_DNAfreq_Random_Generator.pl
# https://perlmonks.org/?node_id=1228191
use strict;
use warnings;
my $window = 1e6;
my $A = my $C = my $G = my $all = 0;
my (@sizes, $tmp, $start);
my $in = shift @ARGV;
my $out = shift @ARGV;
print $in, "\n";
print $out, "\n";
open IN, '<', $in or die "$! opening $in";
open OUT, '>', $out or die "$! opening $out";
sub letter
{
my $n = int rand $all--;
$n < $A ? ($A--, return 'a') :
$n < $A + $C ? ($C--, return 'c') :
$n < $A + $C + $G ? ($G--, return 'g') :
return 't';
}
sub output
{
for my $count ( @sizes )
{
print ">ID", $start++, "\n", map(letter(), 1 .. $count), "\n";
print OUT ">ID", $start++, "\n", map(letter(), 1 .. $count), "\n";
}
@sizes = ();
}
while( <IN> )
{
if( /^>/ )
{
$start //= s/\D+//gr;
}
elsif( /^[acgt]/ )
{
$A += tr/a//;
$C += tr/c//;
$G += tr/g//;
$all += $tmp = tr/acgt//;
push @sizes, $tmp;
$all >= $window and output();
}
}
$all and output();
close IN;
close OUT;
Execution syntax was simply:
perl tybalt89_DNAfreq_Random_Generator.pl Ath_orig.fa Ath_tybalt_shuffle.fa
Thanks a lot! |