Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Unexpected action at a distance with use warnings FATAL=>'all';

by jarich (Curate)
on Jan 23, 2006 at 02:55 UTC ( #524863=note: print w/ replies, xml ) Need Help??


in reply to Unexpected action at a distance with use warnings FATAL=>'all';

next and it's friends are clever little calls in Perl. Did you know you can do this evil thing?

foreach my $thing (@array) { process($thing); add_to_processed($thing); } sub process { my $thing = shift; next if boring($thing); .... } sub add_to_processed { my $thing = shift; last if too_many($thing); .... }

Now just imagine that process and add_to_processed are hidden away in another module, or something like that. Your foreach loop looks like it processes each thing in the array and then adds it to the list of processed things. But it doesn't. Some things are skipped, silently, others are left behind when add_to_processed decides it's had enough.

Call one of these subroutines outside of a loop and watch as sometimes they break, and sometimes they don't! Gotta love it. (Yes, I was given some code a little like this to maintain once....)

At least eval was telling you about your mislaid next. ;)

Personally I try to keep eval statements around the smallest scope possible. So I'd be writing:

for my $case ( @cases ) { my $is_interesting = eval { interesting($case) }; print "$case had errors:$@" if $@; next unless $is_interesting; eval { process($case) }; if ($@) { print "$case had errors:$@"; } }

or some functional equivalent.

Your advice is good. Making warnings fatal and other such sweeping changes definately require a code review or at least careful thought.

Hope you're having fun.

jarich


Comment on Re: Unexpected action at a distance with use warnings FATAL=>'all';
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://524863]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2014-07-10 08:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (202 votes), past polls