$count = () = s/// is a single expression that repeats for each element in @array. Apparently the final element in @array matches but once. If there were two patterns in the final element of @array matching your pattern, then the could would be 2. On each iteration of your for loop the expression is evaluated against a new $_ input, and $count is replaced. You do not employ an accumulator of any kind.
If you wanted to do this as a single line of code you could do this:
do {$count = () = $s/PATTERN/REPLACEMENT/g; $acc += $count} for @array +;
Update: Apparently it's not my day. See below. Thanks AnomalousMonk.
In the end, $acc should contain your total number of matches.
Keep in mind that your /e modifier is probably wrong, and maybe a risk. If the replacement comes from somewhere outside of your control, it could be used to pass a destructive command through the Perl interpreter.
Dave
In reply to Re: How to count substitutions on an array
by davido
in thread How to count substitutions on an array
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |