And the output is the same as was obtained by moving the str package into a separate file. So the issue is (I think) not whether str is in a separate file, but whether it’s “visible” to the Perl compiler when the main code is parsed.
I see no difference in any perl by moving it to the top of the file, or to a different file. I can't see why it would make a difference, and I do not see that it does make a difference. Odd. Even though you're using Windows, I don't know why the behavior would be different.