in reply to Splice an array into another array

Another way of operating directly on the DNA strings as strings (needs Perl version 5.10 or higher for  \K regex operator):

c:\@Work\Perl\monks>perl -wMstrict -le "use 5.010; ;; use Test::More 'no_plan'; use Test::NoWarnings; ;; my $DNA3 = 'ATCGC'; my $DNA4 = 'AAATTGC'; ;; my $n = 1; $DNA3 =~ s{ \A .{$n} \K }{$DNA4}xms; ;; is $DNA3, 'AAAATTGCTCGC', 'string splice ok'; ;; done_testing; " ok 1 - string splice ok 1..1 ok 2 - no warnings 1..2


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^2: Splice an array into another array
by Smeb (Novice) on Jun 23, 2017 at 23:17 UTC

    I think I am getting it now, thank you

    Final question for clarity's sake: in the end I have to manually enter each nucleotide, am I understanding this right? In other words I can't be lazy and store several DNA files I downloaded online into arrays and then operate on them. For each of my array I have to manually type the nucleotide sequences in myself or copy+paste them in

    below I includes 2 examples of what I mean, in the first example I manually stored the nucleotides into arrays, and everything works. In the second example the nucleotides are stored into arrays via filehandler and things do not work (in the way I want)

    this will splice the 2 arrays together in whatever fashion I want

    #!/usr/bin/perl -w @DNA3 = qw(A T C C A T G C); @DNA4 = qw(G C C G A A T T A); splice (@DNA3, 1, 0, @DNA4); print @DNA3, "\n"; exit;

    this will not work, I cannot use this to splice 2 arrays together

    #!/usr/bin/perl -w $DNA3file = 'testDNA3'; open(DNA3handle, $DNA3file); @DNA3 = <DNA3handle>; $DNA4file = 'testDNA4'; open(DNA4handle, $DNA4file); @DNA4 = <DNA4handle>; splice (@DNA3, 1, 0, @DNA4); print @DNA3, "\n"; exit;

        Could you explain this code a bit?  @DNA3=split('',join('',@DNA3)); I don't quite get what it means and why this is necessary for my script to work.

      ... in the end I have to manually enter each nucleotide, am I understanding this right? In other words I can't be lazy and store several DNA files I downloaded online into arrays and then operate on them. For each of my array I have to manually type the nucleotide sequences in myself or copy+paste them in

      You have to realize that when you read a file with | with a sequence of statements like
          $DNA3file = 'testDNA3';
          open(DNA3handle, $DNA3file);
          @DNA3 = <DNA3handle>;
      the  @DNA3 array ends up with all the lines of the file, and each line is a string that looks like  "ATCCATGC\n" (note the newline that will be at the end of (almost) every line).

      If you have the lines of the file as strings, you | your program can operate on them as strings, break them up into arrays and operate on them, etc., as appropriate for your application. Your choice.


      Give a man a fish:  <%-{-{-{-<

        nope, I didn't, but thanks for the explanation, I understand it much more clearly now! :)