my $dna=();
foreach my $dna (@random_DNA) { # Line 19
print"$dna\n";}
print"\n";# one per line Line 21
my $output="RandDNA .txt";
unless (open(RESULT,">my $output")){
print"Cannot open file\"my $output\".\n\n";
exit;
} # Line 26
print RESULT"\n Randomly Generated dna:\n
The DNA set containing $number molecules varying in length from $minl
+ to $maxl bases are:\n\n
my $dna\n";
The first line creates the variable $dna with nothing in it (the undef value) and the print at the end trys to print this value resulting in a warning message. The second line creates a variable named $dna that is local to the foreach loop so the print inside the loop will only produce a warning message if @random_DNA contains an undef value.
my $number= <STDIN>;
my $maxl= <STDIN>;
my $minl= <STDIN>; # Line 10
You should chomp values you receive via the readline operator.
srand(time|$$);
Unless you have a really really REALLY old version of perl you shouldn't use the srand function.
my $dna; # Line 40
# Set of DNA fragments
my @set;
# Create set of random DNA:
for (my $i=0;$i<$number;++$i) {
# find a random length between min & max Line 45:
$length= randomlength ($minl,$maxl);
# add $dna fragment to @set Line 47:
push (@set,$dna);}
return @set;} # Line 49
On the first line you create the variable $dna with nothing in it (the undef value) and then push that value into @set many times and then return a list of those undef values.
# Now write the subroutine make_random_DNA:
sub make_random_DNA { # Line 57
# Collect arguments, declare variables:
my ($length)=@_; # Line 59
my $dna;
for (my $i=0;$i<$length;++$i) {
$dna.=randomnucleotide();} # Line 62
return $dna;}
This subroutine never gets used anywhere so no random DNA sequences are created.
This may work better, at least it's easier to read (UNTESTED):
#!/usr/bin/perl
# Program to generate Random DNA set:
use strict;
use warnings;
print "\n\n Enter No. of DNA Molecules required: ";
chomp( my $number = <STDIN> );
print "\n Enter Maximum length of DNA (bases): ";
chomp( my $maxl = <STDIN> );
print "\n Enter Minimum length of DNA (bases): ";
chomp( my $minl = <STDIN> );
# An array initialized to the empty list, to store the DNA in:
# Call the subroutine to do the real job:
my @random_DNA = make_random_DNA_set( $minl, $maxl, $number );
# print the results, one per line
print "\n The DNA set containing $number DNA molecules, varying in len
+gth from $minl to $maxl bases, are:\n\n";
print map( "$_\n", @random_DNA ), "\n";
my $output = 'my RandDNA .txt';
open my $RESULT, '>', $output or die qq[Cannot open file "$output" bec
+ause: $!];
print $RESULT <<RESULT;
Randomly Generated dna:
The DNA set containing $number molecules varying in length from $minl
+to $maxl bases are:
@random_DNA
RESULT
exit 0;
# Subroutines
# Calling the subroutine make_random_DNA_set
sub make_random_DNA_set {
# Collect arguments, declare variables
my ( $minl, $maxl, $number ) = @_;
my @set;
# Create set of random DNA:
for ( 1 .. $number ) {
# find a random length between min & max
my $length = $minl + int rand $maxl - $minl + 1;
# add $dna fragment to @set
push @set, make_random_DNA( $length );
}
return @set;
}
# Now write the subroutine make_random_DNA:
sub make_random_DNA {
my ( $length ) = @_;
my @nucleotides = qw( A T G C );
return join '', map $nucleotides[ rand @nucleotides ], 1 .. $l
+ength;
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.