Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

Hi Perlmonks,

I am a beginner in perl programing. I have tried several times to generate a set of random DNA molecules using the code described in "Example 7-3: Generate random DNA" in the book "Beginning Perl for Bioinformatics" authored by James Tisdall (8th Indian Reprint 2011) page No.138-141. I have kept the code almost same except substituting the variable name my $size_of_set for my $number and giving <STDIN> input three times at lines 6, 8 and 10 in the script randomdna.pl. But it does not show the desired result due to use of uninitialized value $dna in concatenation (.) or string at C:\Users\x \Desktop\randomdna.pl line 20, <STDIN> line 3. I have tried to fix the problem by using the initializing code $dna=(); at line 40. But it does not work. I don't understand where I am going wrong. Can any perlmonk help me correct the mistake in my code randomdna.pl? Here goes the code:

#!/usr/bin/perl # Program to generate Random DNA set: use strict; use warnings; print"\n\n Enter No. of DNA Molecules required: ";# Line 5 my $number= <STDIN>; print"\n Enter Maximum length of DNA (bases): "; my $maxl= <STDIN>; print"\n Enter Minimum length of DNA (bases): "; my $minl= <STDIN>; # Line 10 # An array initialized to the empty list, to store the DNA in: my @random_DNA= (); srand(time|$$); # Call the subroutine to do the real job: @random_DNA=make_random_DNA_set($minl,$maxl,$number); # print the results, one per line: Line 16 print"\n The DNA set containing $number DNA molecules, varying in leng +th from $minl to $maxl bases, are:\n\n"; 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"; close(RESULT);# Line 30 exit; # Line 32 Subroutines (five): # Calling the subroutine make_random_DNA_set: # Line 33 sub make_random_DNA_set { # Collect arguments, declare variables my ($minl,$maxl,$number)=@_; # Length of each DNA fragment # Line 37 my $length; # DNA fragment: 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 # Write the Subroutine randomlength: sub randomlength { # Collect arguments, declare variables Line 52: my ($minl,$maxl)=@_; # Get the random number in correct interval: return (int(rand($maxl-$minl+1))+$minl);} # 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;} # Now write the subroutine randomnucleotide Line 64: sub randomnucleotide { my (@nucleotides)=('A','T','G','C'); return randomelement(@nucleotides); # Line 67 # Now write the subroutine randomelement: sub randomelement { my(@array)=@_; return $array[rand @array];} # Line 71 }

I have got the following incorrect results in cmd screen:

Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\x>cd desktop C:\Users\x\Desktop>randomdna.pl Enter No. of DNA Molecules required: 5 Enter Maximum length of DNA (bases): 10 Enter Minimum length of DNA (bases): 7 The DNA set containing 5 DNA molecules, varying in length from 7 to 10 bases, are: Use of uninitialized value $dna in concatenation (.) or string at C:\U +sers\x \Desktop\randomdna.pl line 20, <STDIN> line 3. Use of uninitialized value $dna in concatenation (.) or string at C:\U +sers\x \Desktop\randomdna.pl line 20, <STDIN> line 3. Use of uninitialized value $dna in concatenation (.) or string at C:\U +sers\x \Desktop\randomdna.pl line 20, <STDIN> line 3. Use of uninitialized value $dna in concatenation (.) or string at C:\U +sers\x \Desktop\randomdna.pl line 20, <STDIN> line 3. Use of uninitialized value $dna in concatenation (.) or string at C:\U +sers\x \Desktop\randomdna.pl line 20, <STDIN> line 3. Use of uninitialized value $dna in concatenation (.) or string at C:\U +sers\DR-SU PRIYO\Desktop\randomdna.pl line 27, <STDIN> line 3. C:\Users\x\Desktop>

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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • 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.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2024-04-19 05:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found