If you decide Corion's excellent advice and enable warnings for your code while body of the code intact, you can suppress this warning easily.
sub test { my ( $s ) = @_; if ($s == 3) { no warnings 'exiting'; # suppress the warning for this lexical +scope only. next; } else { print $s . "\n"; } }
My personal preference is to use something more like this:
use strict; use warnings; my @stuff = 1..5; for my $s (@stuff) { next if is_bad_stuff($s); my $formatted = format_stuff($s); print "$formatted: passed\n"; } sub is_bad_stuff { my ( $s ) = @_; return $s == 3; } sub format_stuff { my ( $s ) = @_; $s = '<UNDEF>' return "Formatted $s"; }
The downside of this is the extra function call. The upside is that it's (hopefully) easier to read and maintain.
I like to collect code with side-effects (like printing) into as few places as possible, so my format_stuff routine preps the data for output but does not emit it. I know this is a toy example, but the habit has served me well.
TGI says moo
In reply to Re: Loop controls transcends scope?
by TGI
in thread Loop controls transcends scope?
by smsiebe
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |