in reply to Re: How to count substitutions on an array
in thread How to count substitutions on an array

do {$count = () = $s/PATTERN/REPLACEMENT/g; $acc += $count} for @array;

But  s/// returns the number of substitutions made (or the empty string if none), so when list-ified this number (or the empty string) will always be a single-elemment list (update: which in scalar context will always be a  $count of 1), so the  $acc total will always be the number of elements of the  @array array.

c:\@Work\Perl>perl -wMstrict -le "my @array = qw(PAT PATxPATxPAT PATxPATxPATxPATxPAT xxxxx); ;; my $acc; do { my $count = () = s/PAT/REP/g; $acc += $count; } for @array; ;; print qq{\$acc: $acc \@array: (@array)}; " $acc: 4 @array: (REP REPxREPxREP REPxREPxREPxREPxREP xxxxx)


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^3: How to count substitutions on an array
by davido (Cardinal) on Aug 14, 2016 at 02:42 UTC

    Thanks. You caught me!

    Here are some idioms that could be preferable:

    use strict; use warnings; my @data = qw(foozbar foozball zoobeezoobedo); my $acc = 0; do { my $count = s/o/*/g; $acc+=$count; } for @data; print "$acc\n"; # But the above really can just boil down to: my $count; $count += s/\*/o/g for @data; print "$count\n"; # List::Util's reduce is always fun. use List::Util 'reduce'; my $total = reduce {$a += $b =~ s/o/*/g} 0, @data; print "$total\n";

    Hope this helps (and thanks again for catching the error).


    Dave