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 ( [id://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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://181975]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2024-04-19 02:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found