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":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.