Today I ran into an example of a situation that might warrant such improper nesting. I decided to clean up a Perl script, converting it to 'use strict'. Along the way I enabled warnings using Perl's lexically scoped 'use warnings' facility. In places I had to disable warnings, to make the code compile and run with few enough changes.
And so I encountered:
if( ... ) {
...
my $m = an expression with an ignorable warning;
...
}
I want to disable the warning for the smallest possible region, but
if( ... ) {
...
{ no warnings 'type';
my $m = an expression with an ignorable warning;
}
...
}
restricts the scope of both the warning disable (good),
but also the variable (nad).
Whereas letting the warning be disabled until the end of the enclosing lexical scope
if( ... ) {
...
no warnings 'type';
my $m = an expression with an ignorable warning;
...
}
disables the warning for too large a region.
What you want is
if( ... ) {
...
<disable-warnings 'type'>
<variable-scope 'm'>
my $m = an expression with an ignorable warning;
</disable-warnings>
...
</variable-scope>
}