http://qs1969.pair.com?node_id=11110281

rsFalse has asked for the wisdom of the Perl Monks concerning the following question:

Hello again,

I was playing with 'do{ }' and found interesting behaviour. Here is a code:
#!/usr/bin/perl -l use strict; use warnings; my $uninitialized; print do { $uninitialized }; print do {}; print do { if( 1 ){} }; print do { if( 0 ){} }; print '-' x 10; print scalar do { $uninitialized }; print scalar do {}; print scalar do { if( 1 ){} }; print scalar do { if( 0 ){} };
output:
Use of uninitialized value $uninitialized in print at ./perlmonks_do_u +nitialized.pl line 8. 0 ---------- Use of uninitialized value $uninitialized in print at ./perlmonks_do_u +nitialized.pl line 15. Use of uninitialized value in print at ./perlmonks_do_unitialized.pl l +ine 16. Use of uninitialized value in print at ./perlmonks_do_unitialized.pl l +ine 17. 0
For me it is strange that 'scalar do {};' and 'scalar do { if( 0 ){} };' have different outputs, as the codes look equivalent. Can someone explain a difference in the output?