Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48001. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48007. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48023. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48033. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48055. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48059. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48061. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48079. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48087. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48101. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48103. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48107. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48131. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48135. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48189. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48219. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48221. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48225. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48235. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48237. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48243. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48247. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48253. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48299. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48351. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48371. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48387. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48391. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48395. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48403. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48423. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48425. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48447. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48451. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48453. Use of uninitialized value in concatenation (.) or string at sequence_replacement.pl line 56, line 48455. #### #!/usr/bin/perl use strict; use warnings; use Getopt::Long; #set variables my ($optHelp, $optFile1, $optFile2, $optList); #get program options GetOptions ('h' => \$optHelp, 'a=s' => \$optFile1, 'b=s' => \$optFile2, 'l=s' => \$optList); # there are better ways to do this but I like this strategy :) if($optHelp || !$optFile1 || !$optFile2 || !$optList ){ print "Usege:\n\n"; print "./program -a file1 -b file2 -l list<.tsv> \n\n"; print "Note: sequences from file2 are replaced with those in file1 according to the list -l\n\n"; exit(0); } #allocate memory (well, more of set variables) my %hash1 =(); my %list = (); #open files open (ONE, "<", $optFile1) or die "$!"; open (TWO, "<", $optFile2) or die "$!"; open (LIST, "<", $optList) or die "$!"; #load list which should look like: #file1_id file2_id while(){ chomp; /^(.*?)\t(.*)/; $list{$1} = $2; #e } close LIST; #read file one into memory my $head; while(){ chomp; if(/>(.*)/){$head = $1; next;} #e $hash1{$head} .= $_; } close ONE; #replace fasta record from file to with the one in file one if id is set in list file my $x = 0; while(){ chomp; ## You can play with this if one line fasfa sequence is not what you can use if(/>(.*)/){if(defined $list{$1}){print $_. "\n" . $hash1{$list{$1}} . "\n"; $x = 1}else{$x = 0}} #e print $_ . "\n" if $x == 0; #e } close TWO;