http://qs321.pair.com?node_id=435971


in reply to Re: Finding error: uninitialized value in concatenation?
in thread Finding error: uninitialized value in concatenation?

Thanks much. The problem was with an occasionally NULL value.

To clean up the sequence data and make it suitable for other tools, I needed to convert it to upper case and break up the sequence and associated info into lines of 80 characters or less.

I've made several of the optimizations and will try another run soon.

  • Comment on Re^2: Finding error: uninitialized value in concatenation?

Replies are listed 'Best First'.
Re^3: Finding error: uninitialized value in concatenation?
by tall_man (Parson) on Mar 02, 2005 at 23:36 UTC
    If you need to reformat blocks of text with wrapping, I suggest you look at Text:Wrap. The regular expression you have now will over-split short lines:
    use strict; my $sequence = "This is a nice line "; # Note: You should use '\1' rather than '$1'. $sequence =~ s/(\S{1,80})/\1\n/g; print "*",$sequence,"*\n";
    This prints:
    *This is a nice line *
    If $sequence contains nothing but solid blocks of non-space characters (genome sequences, for example), or you don't care about splitting short words, then unpack would be faster.
    use strict; my $sequence = "123456789012345678901234567890123456789012345678901234 +56789012345678901234567890123456"; my $len = int(length($sequence)/80); my @seq = ($len > 0) ? unpack("(A80)$len A*",$sequence) : $sequence; print "*",join("\n",@seq),"*\n";