You're also re-declaring $text inside your while loop each time and then matching it, which doesn't make sense, and should result in a "Use of uninitialized value in substitution" warning.
This is not true. An our-variable is declared only for the current block, but it's the same variable every time you declare it. The following code works fine:
use strict;
use warnings;
{
our $text = 'test';
}
{
our $text =~ s/t/T/;
}
{
print our $text; # "Test"
}
However I can't tell why
Grey Fox's code doesn't work. He should have provided the input files.