in reply to Re^3: Go to?
in thread Go to?

The use of goto is definitely a CodeSmell and needs to be explained in a code review. next/last should never be used without a label and that label should be within two levels of nesting.

But, to dismiss goto out of hand begs the question - why did Larry include goto? Djikstra's paper was 20 years before the release of Perl 1.0 and I'm pretty he knew about it.


My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

Replies are listed 'Best First'.
Re^5: Go to?
by Limbic~Region (Chancellor) on Apr 11, 2006 at 15:23 UTC
    dragonchild,
    I am not sure I have ever encountered a legitimate need for using goto LABEL in perl. I have used the other "ok" form a handful of times. According to tilly, he has only ever encountered 2 legitimate uses. That is to say that it doesn't come up that often. On the other hand, Knuth himself has apparently written a paper on defending the virtues of goto (if Ovid is to be believed)*. I think your advice is sound. Any use of goto LABEL warrants documentation and code review.

    Cheers - L~R

    * - The link in that thread is dead ATM :-)

      Knuth did indeed write that paper. And I've read it.

      In that paper Knuth has two basic arguments for goto. The first is that there are algorithms that can be more efficiently written with goto than without. The second is that it is useful for exception handling. He also quotes a theorem that named loop control would obviate the first point.

      Perl has exactly that form of named loop control, so the algorithmic argument for goto does not apply in Perl. (Besides, Perl's implementation of goto is not very efficient...) And since the 70's the idea of structured exception handling has come around. That is much better than the use of goto for the same purpose. Therefore Knuth's arguments fail for Perl.

      For more detail on my opinions about goto, Re (tilly) 4: Paradigm Shift - when to use goto is still accurate. And no, I have not run into any more legitimate needs for goto in Perl.

Re^5: Go to?
by tilly (Archbishop) on Apr 20, 2006 at 04:15 UTC
    My understanding is that Larry included goto in Perl because he knew that Perl's success depended on convincing people that what they were already doing with awk and sed could be done by Perl. He therefore wanted to write automatic code translators s2p and a2p from those languages to Perl.

    Since sed scripts use goto extensively, he either needed to automatically translate sed scripts to goto-less versions, or else he needed to add goto to Perl. It was easier to add goto to Perl, so he did.

    This is one of the two necessary uses of goto that I have seen in Perl.