Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: How can I generate random DNA using the code given by James Tisdall?

by jwkrahn (Monsignor)
on Aug 27, 2012 at 09:32 UTC ( #989952=note: print w/ replies, xml ) Need Help??


in reply to How can I generate random DNA using the code given by James Tisdall?

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; }


Comment on Re: How can I generate random DNA using the code given by James Tisdall?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://989952]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2015-07-03 06:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (48 votes), past polls