On Thu, Jun 13, 2002 at 11:31:07PM +0200, Stefan `Sec` Zehl wrote:
> The shortest test case i found is:
>
> | ice:~>echo a |perl5.6.1 -we 'print "$1"'
> | Use of uninitialized value in string at -e line 1.
> | ice:~>echo a |perl5.6.1 -we 'print "$1\n"'
> |
> | ice:~>echo a |perl5.6.1 -we 'print ".$1\n"'
> | Use of uninitialized value in concatenation (.) or string at -e line 1.
> | .
>
> just for a quick check, my normal perl behaves as expected:
>
> | ice:~>echo a |perl5.00503 -we 'print "$1\n"'
> | Use of uninitialized value at -e line 1.
>
> Now if somebody could explain to me how and why this happens?
Bug. The history is someone noticed that since this:
my $foo; $foo = $foo . 42
Use of uninitialized value at -e line 1.
and this:
my $foo; $foo .= 42
are logically the same, the former shouldn't warn. So that was changed in
5.6.0. Trouble is this:
my $foo; print "$foo 42";
literally reduces to the same opcodes as this:
my $foo; print $foo . ' 42';
so the warning was implicitly removed from "$some_var stuff" in 5.6.1.
This has been fixed in 5.8.0.
$ perl5.8.0 -wle 'my $foo; print "$foo 42"'
Use of uninitialized value in concatenation (.) or string at -e line 1.
42
--
This sig file temporarily out of order.