Несколько комментариев на ваш вопрос.Программы на Perl едва ли определяют main()
как подпрограмму.Это подход Python.
while (@array)
будет бесконечным циклом, поскольку @array
никогда не становится меньше.Вы не можете читать переменную по умолчанию $_
таким образом.Чтобы это работало, используйте for (@array)
, который будет считывать элементы массива в $_
по одному, пока все не будут прочитаны.
Оператор транслитерации tr
является правильным инструментом для вашей задачи.
Код, необходимый для получения результатов, может быть:
#!/usr/bin/perl
use strict;
use warnings;
my @data = ("QQQRRRRSCCTTTS", "ZZZSTTKQSST", "ZBQLDKSSSS");
my $i = 1;
for (@data) {
my $count = tr/ST//;
print "Element $i Counts of ST = $count\n";
$i++;
}
Также обратите внимание, что my $count = tr/ST//;
не требует привязки оператора транслитерации с $_
.Perl предполагает это, когда $_
содержит значение для подсчета здесь.Ваш код пробовал my $s = ($_ = tr/S//);
, который даст результаты, но более короткий путь, который я показал, является предпочтительным.
(Только что заметил, что в вашем утверждении было =
вместо =~
.ошибка. Должно быть $s = ($_ =~ tr/S//);
)
Вы можете объединить 2 искомые буквы, как в моем коде.Нет необходимости делать их отдельно.
Я получил нужный вывод.
Element 1 Counts of ST = 5
Element 2 Counts of ST = 6
Element 3 Counts of ST = 4
Кроме того, вы не можете выполнять математические операции в строке в кавычках, как у вас.
print "ST are in total $s + $t\n";
Вместо этого вам нужно будет:
print "ST are in total ", $s + $t, "\n";
, где операция выполняется вне строки.