in reply to Re^3: How does 'goto LABEL' search for its label? (yow?)
in thread How does 'goto LABEL' search for its label?

> Now, I think using goto to leave a subroutine is a rather squirrely technique.

It's a way to directly break out of a deep recursion.

my $counter; sub rec { goto OUT if $counter++ >= 10; print $counter; rec(); # never reached } rec(); OUT:

This can be handy to avoid the code-block after a recursive call w/o needing to check a status-flag.

Cheers Rolf

Replies are listed 'Best First'.
Re^5: How does 'goto LABEL' search for its label? (yow!)
by tye (Sage) on Jan 17, 2013 at 04:07 UTC

    I didn't say it should be disallowed. I said it is squirrely. In particular, it is easy to see doing this by accident. So it is appropriate to issue a warning which even provides the opportunity to add a line indicating "yes, I really did intentionally use 'goto' to exit this subroutine".

    And die is a less squirrely way to unwind a stack.

    - tye        

      > I didn't say it should be disallowed.

      I didn't say you did! :)

      Just wanted to show a motivation for this technique.

      > And die is a less squirrely way to unwind a stack.

      ehm ... you mean within an eval block?

      Well tastes differ...

      EDIT: Hmm ... at least die can easily send a message...

      Cheers Rolf