#!/usr/bin/perluse warnings;use strict;####################################### USAGE ####################################################my $usage ="$0 precursor.fa mature.fa ath zmaThis script is used to extract mature and precursor miRNA sequence from the corrosponding files in miRBase, like precursor.fa and mature.fa.At least three files are need. Except from precursor and mature file, a three-letter species name is also has to given, like ath, zma, osa, psi.More species names are also support!";####################################### MAIN #####################################################if(@ARGV<3){    die "At least three files are needed!\n$usage";}my $pre=shift @ARGV;my $mat=shift @ARGV;unless(-r $pre){    die "Cannot find file $pre";}unless(-r $mat){    die "Cannot find file $mat";}my $r_pre=store_seq($pre);my $r_mature=store_seq($mat);foreach my $spe(@ARGV){    open OM, ">${spe}_mature.fa";    open OP, ">${spe}_hairpin.fa";    foreach(sort keys %$r_mature){        if(/^>($spe)/){            print OM $_."\n".$r_mature->{$_};        }    }    foreach(sort keys %$r_pre){        if(/^>($spe)/){            print OP $_."\n".$r_pre->{$_};        }    }    close OM;    close OP;}sub store_seq{    my $file=shift;    my %hash;    open IN, $file;    my $mir;    while(<IN>){        if(/^>/){            $mir=(split /\s+/)[0];        }        else{            $hash{$mir}.=$_;        }    }    close IN;    return \%hash;}