Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Re: GOTO considered (a necessary) evil?

by hossman (Prior)
on Jul 16, 2002 at 01:28 UTC ( #181975=note: print w/replies, xml ) Need Help??


in reply to Re: GOTO considered (a necessary) evil?
in thread GOTO considered (a necessary) evil?

But a redo (just like next and last is just a glorified goto.

I consider this statement blatently false and missleading.

  • goto FOO causes is designed to cause execution to jump to the lable FOO anywhere in your script (provided no initialization would be neccessary to get there)
  • redo FOO will only work if the is designed to cause execution to jump to label FOO if it exists at some surrounding loop block. (allthough it will work w/warning if the label applies to some dynamicly surrounding loop)

This typo generates an error...

perl -le 'BAR: print 1; BAZ: for (2..3) {print; redo BAR; }'

This typo causes an infinite loop...

perl -le 'BAR: print 1; BAZ: for (2..3) {print; goto BAR; }'

(Updated to be less pedantic... the point is, goto is for arbitrary jumping, redo is for controlled jumping to the begining of a loop. Could you live w/o redo if you had goto? yes. Does that mean you should just use goto and not bother with redo? no.)

Replies are listed 'Best First'.
Re: Re: Re: GOTO considered (a necessary) evil?
by clintp (Curate) on Jul 16, 2002 at 02:19 UTC
    But a redo (just like next and last is just a glorified goto.
    I consider this statement blatently false and missleading.
    • redo FOO will only work if the label FOO exists at some surrounding loop block

    I consider this statement to be inaccurate and not quite pendantic enough for flaming someone! Observe:

    sub bar { no warnings 'exiting'; redo FOO; } FOO: { print "Hey!"; bar(); }
    The redo worked and the label did not exist in a surrounding loop block.
Re: GOTO considered (a necessary) evil?
by Abigail-II (Bishop) on Jul 16, 2002 at 09:25 UTC
    This typo generates an error...
    perl -le 'BAR: print 1; BAZ: for (2..3) {print; redo BAR; }'
    This typo causes an infinite loop...
    perl -le 'BAR: print 1; BAZ: for (2..3) {print; goto BAR; }'
    That's a pretty weak example, because if you omit the typos, both
    perl -le 'BAR: print 1; BAZ: for (2..3) {print; redo BAZ; }'
    and
    perl -le 'BAR: print 1; BAZ: for (2..3) {print; goto BAZ; }'
    behave identically - looping infinitely.

    Abigail

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://181975]
help
Chatterbox?
[thezip]: So, we have a small deployment coming up soon for a project. What is the general name for the project management documentation that details the tasks and schedules/ sequences for the execution of the deployment?

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (12)
As of 2017-02-23 17:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?






    Results (350 votes). Check out past polls.