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>
}
 
 
No comments:
Post a Comment