in reply to Re^3: A cleaner way of scoping variables
in thread A cleaner way of scoping variables
As often, Deparse comes to the rescue. With formatting adjusted for comparability with yours, the output is
#!/usr/bin/perl -w my $true = "foo"; my $false = "0"; my $dc = "bar"; warn do { $dc if $false }; warn do { $dc unless $true }; warn do { $dc while $false }; warn do { $dc until $true }; warn do { if ($false) { $dc; } }; warn do { unless ($true) { $dc; } }; warn do { while ($false) { $dc; } }; warn do { until ($true) { $dc; } }; warn do { '0' }; warn do { 'foo' }; warn do { do { '0' } }; warn do { do { !1 } }; warn do { '0' }; warn do { !1 }; warn do { }; warn do { };
Note the !1 — ie "not true", ie "The Real False", which is an empty string in Perl5. That explains your something's wrong messages: the loops are getting folded away at compile time, but apparently the compiler doesn't evaluate hard enough.
Makeshifts last the longest.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: A cleaner way of scoping variables
by ikegami (Patriarch) on Oct 21, 2005 at 15:09 UTC |