#! /usr/bin/perl/

use strict;
use warnings;



my $file1=$ARGV[0];   ### file1.fasta
my $file2=$ARGV[1];   ### file2.fasta
my $out=$ARGV[2];     ### output file

my $usage="
USAGE:
perl $0 <file1.fasta> <file2.fasta> <output.fasta>
file1: First fasta file
file2: Second fasta file
output: File to save the output";

die "\nAll parameters are required",$usage unless($file1 && $file2 && $out);


my $f1=fastaparser($file1);
my $f2=fastaparser($file2);
my %h1=%{$f1};
my %h2=%{$f2};



open O, ">$out" or die$!;

foreach my $key1 (sort (keys(%h1))){

my $seq1=$h1{$key1};

#print "$seq1\n";

foreach my $key2 (sort (keys(%h2))){
my $seq2=$h2{$key2};
#print "$seq2\n";
if($seq1 =~ /^$seq2$/)
    {
      print O "$key1 $seq1 $key2\n"
  
     }
  }
}

sub fastaparser {
    my $filename = $_[0];  # contigs.fasta file

    my %fasta;
    my $count;
    open (FILE, $filename) or die$!; # open file

    my $line = <FILE>;
    
    do {
        if ($line =~ /^>/)  #grep Id
        {
            my $seq; chomp $line; my @i=split(/>/, $line);
            my $id = $i[1];          
            

            do {
                $line = <FILE>;
                chomp $line;
                $seq .= $line unless $line =~ /^>/;  #concatinate the sequence till the next ">" character.
                }
            until ($line =~ /^>/ or eof(FILE));

            $fasta{$id} = $seq;
         }
        else {
            $line = <FILE>;
              }
        } until (eof(FILE));    

    return \%fasta;    #Return the entire hash reference.
  }
