... my @infiles = @ARGV; for my $file ( @infiles ) { my ($descriptions, $sequences) = ParseFile( $file ); ... # output the data here } ... sub ParseFile { my $file = shift; my %descriptions = my %sequences = (); open (my $fh, '<', $file) or die "Cannot open input file $file: $!\n"; while ( my $line = <$fh> ) { chomp $line; if ( $line =~ m/^>(\S+)\s(.+)/ ) { $descriptions{$1} = $2; } else { $sequences{$1} = $.; } } return (\%descriptions, \%sequences); } ...