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:
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.