Проблема здесь:
my $perc = perc_nucleotide($line , $nt);
printf("The percentage of $nt nucleotide in given sequence is %.0f", $perc);
perc_nucleotide
возвращает 0.18018018018018
, но формат %.0f
говорит, что нужно напечатать его без десятичных знаков.Таким образом, оно усекается до 0. Вы, вероятно, должны использовать что-то более похожее на %.2f
.
Стоит также отметить, что perc_nucleotide
не имеет return
.Это все еще работает, но по причинам, которые могут быть не очевидны.
perc_nucleotide
устанавливает my $perc = ($count/$total_len)*100;
, но никогда не использует это $perc
.$perc
в основной программе - это другая переменная.
perc_nucleotide
что-то возвращает, каждая подпрограмма Perl без явного возврата возвращает «последнее вычисленное выражение».В этом случае это my $perc = ($count/$total_len)*100;
, но последние оцененные правила выражения могут быть немного хитрыми.
Проще читать и безопаснее иметь явный возврат.return ($count/$total_len)*100;