Suppose I have:
my $string = \"one.two.three.four\";
How should I play with context to get the number of times the pattern found a match (3
I think the clearest way to describe this would be to avoid the instant-cast to scalar. First assign to an array, and then use that array in scalar context. That's basically what the = () =
idiom will do, but without the (rarely used) idiom:
my $string = "one.two.three.four";
my @count = $string =~ /\./g;
print scalar @count;
my $count = 0;
my $pos = -1;
while (($pos = index($string, $match, $pos+1)) > -1) {
$count++;
}
checked with Benchmark, it's pretty fast
Friedo's method is: $a = () = $b =~ $c
.
But it's possible to simplify this even further to just ($a) = $b =~ $c
, like so :
my ($matchcount) = $text =~ s/$findregex/ /gi;
You could thank just wrap this up in a function, getMatchCount()
, and not worry about it destroying the passed string.
On the other hand, you can add in a swap, which may be a bit more computation, but does not result in altering the string.
my ($matchcount) = $text =~ s/($findregex)/$1/gi;