Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

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.


Log In?

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2022-10-05 15:31 GMT
Find Nodes?
    Voting Booth?
    My preferred way to holiday/vacation is:

    Results (24 votes). Check out past polls.