Here is a shorter reproducing script. I wrote it before I decided to google for this problem... :D
#!/usr/bin/perl -w
use strict;
foreach (0..1) {
my $scalar;
open my $h, ">", \$scalar;
print "End of $_\n";
}
Similar to the OP, this generates a warning the second but not the first time through the loop.
But unlike the OP, it just fiddles with a
my $h handle, not STDOUT or anything like that.
Similar to the OP, initializing with
my $scalar = '' removes the warning, but isn't this a perl bug? Shouldn't $scalar be in the same state both times through the loop when it isn't initialized?