#!/usr/bin/env perl use 5.010; use strict; use warnings; use autodie; my $header = ''; my (@headers_found, %header_data); open my $fasta_fh, '<', $ARGV[0]; while (<$fasta_fh>) { chomp; next if /^\s*($|#)/; if (/^>(.*)$/) { push @headers_found, ($header = $1); } else { die 'Sequence data found without a header!' unless $header; for (split '', "\U$_") { /(?[BDEZ])|(?[KRH])|(?[AVLI])|(?[FHYW])|(?[DEHKNQRSTZ])|(?[ACFGILMPVWY])/; if ($_ =~ /(?[XUGJOP])/){ next;} ++$header_data{$header}{(keys %+)[0]}; } } } close $fasta_fh; for (@headers_found) { say "Header: $_"; say "\tAcidic: $header_data{$_}{a}"; say "\tBasic: $header_data{$_}{b}"; say "\tAliphatic: $header_data{$_}{ali}"; say "\tAromatic: $header_data{$_}{aro}"; say "\tPolar: $header_data{$_}{po}"; say "\tNonpolar: $header_data{$_}{nonpo}"; # say "\tUnknown: $header_data{$_}{u}"; }