Hi Steffen,
COFF'd.
> Very often i find myself needing a restart necessity, so "continue
> N" would that be. Then again when "N" is a number instead of
> a label this is a (let alone maintainance) mess but for shortest
> code paths.
Do you mean ‘continue’ which re-tests the condition or more like Perl's
‘redo’ which re-starts the loop's body?
‘The "redo" command restarts the loop block without evaluating the
conditional again. The "continue" block, if any, is not executed.’
— perldoc -f redo
So like a ‘goto redo’ in
while (...) {
redo:
...
if (...)
goto redo
...
}
--
Cheers, Ralph.
Regarding the general subject of using GOTOs: The first computer on which I did hands-on programming was an IBM S/360 model 25. It had 32K of memory available for user programs--that's both instructions and data. It executed code at about a 30 KIPS (yes--KILO instructions/second) rate. When you're programming on a machine that is that slow and with that limited an address space, every instruction counts. You couldn't afford either the space or the time to execute conditional tests just to avoid a GOTO. Programming using GOTOs doesn't necessarily mean you're writing rat's nest or spaghetti code. Yes, you can make a mess using GOTOs, and perhaps messy code is easier when GOTOs are allowed, but structured programming just for its own sake can lead to convoluted and messy program structure as well. What was rat's nest control flow with GOTOs can turn into rat's nest data flow of state variables. It's also worth noting that one of the main functions of a modern optimizing compiler is to take your nice, structured program and put all those rat's nest GOTOs (unconditional branch instructions) back so the thing will execute more quickly. -Paul W.
Ralph Corderoy wrote in <20230311112508.7306220145@orac.inputplus.co.uk>: |Hi Steffen, | |COFF'd. | |> Very often i find myself needing a restart necessity, so "continue |> N" would that be. Then again when "N" is a number instead of |> a label this is a (let alone maintainance) mess but for shortest |> code paths. | |Do you mean ‘continue’ which re-tests the condition or more like Perl's |‘redo’ which re-starts the loop's body? No Ralph, i unspecifically meant multiple nested loops where some inner has to restart/continue the outer (at some point). So a bit like that of "man perlsyn", but with deeper nesting If you need both "next" and "last", you have to do both and also use a loop label: LOOP: { do {{ next if $x == $y; last LOOP if $x == $y**2; # do something here }} until $x++ > $z; } --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt)