http://www.perlmonks.org?node_id=1074778


in reply to Regex shows only last match multiple times?

You can make your code rather more simpler and hence, easier to read:

Initialise $count to zero

my $count = 0;

...or, even more simply

my $count;

Then you don't need that perverse

$count = $count - 1;

statement. And even if you did want it, what's wrong with

$code--;

(always bearing in mind the old TIMTOWTDI acronym of course!)

The next simplification, if the file really does consist of just one line, is to slurp it in, in one hit

@array = <$fh>; # Reads all lines into array $singleLine = <$fh>; # reads one line only

Finally, and this is where I think your question might get answered, you can capture regex hits to an array and then simply count the array...

my @count = $w =~ /$x/g; my $total = @count;

With no loops making it look more complicated than it is, you can then start to pin down what is going on here. Perhaps use some test data/test regex to give a simpler starting block. I would also be suspicious of perl being greedy in that there regex. But first, create some test data and make sure you can "prove" your code before hitting the real data.