This is a simple Perl script to read a multifasta file as a hash.
Suppose, your multifasta file is “input.fasta”, which you want to read as the hash.
#! /usr/bin/perl use warnings; use strict; my $infile = "input.fasta"; my %sequences; open( FH, '<', $infile ) or die $!; while( my $line = <FH> ){ chomp $line; if ( $line =~ /^(>.*)$/ )){ my $id = $1; } elseif ( $line !~ /^\s*$/ ){ $sequences{$id} .= $line; } } close (FH); exit;
If you want to write a subroutine for reading a fasta file, then you can do like this:
#! /usr/bin/perl use warnings; use strict 'vars'; my $infile = "input.fasta"; my %seqs = %{ read_fasta_as_hash($infile) };#call the subroutine #your code goes here sub read_fasta_as_hash{ my $inputfile = shift; my $id = ''; my %sequences; open( INFILE, '<', $inputfile ) or die $!; while( my $line = <INFILE> ){ chomp $line; if ( $line =~ /^(>.*)$/ )){ my $id = $1; } elseif ( $line !~ /^\s*$/ ){ $sequences{$id} .= $line; } } close (INFILE); return %sequences; } exit;