Замените эти две строки:
my @count = join(',', @arr) =~ m/,$i,/g; # ???
my $count1 = scalar(@count); # I want this $count1 to be the number of times each of the numbers($i) was found within the string/array.
с этим:
my $count1 = grep { $i == $_ } @arr;
grep
вернет список элементов, для которых только выражение в {}
будет иметь значение true. Это менее подвержено ошибкам и намного более эффективно, чем join
использование всего массива и использование регулярных выражений. Также обратите внимание, что scalar
не требуется, поскольку переменная $count1
является скалярной, поэтому perl вернет результат grep
в скалярном контексте.
Вы также можете избавиться от этой строки:
push(@count2, $count1 ." times for ". $i); # pushing a "number then text and a number / scalar, string, scalar" to an array.
поскольку вы уже печатаете ту же информацию в своем последнем цикле foreach
.