in reply to How to count substitutions on an array
$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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: How to count substitutions on an array
by AnomalousMonk (Archbishop) on Aug 14, 2016 at 01:08 UTC | |
by davido (Cardinal) on Aug 14, 2016 at 02:42 UTC |