in reply to Re^4: Ways to control a map() operation
in thread Ways to control a map() operation

Oh yes, you can. But you will not only leave the eval but the loop around it, too. If there is no loop around that eval, you'll die—just like your code demonstrated.

No. You don't leave the eval, you just evaluate a last that will make you leave the loop.

That's what I said, isn't it?
  • Comment on Re^5: Ways to control a map() operation

Replies are listed 'Best First'.
Re^6: Ways to control a map() operation
by Leviathan (Scribe) on Jul 16, 2006 at 12:19 UTC

    You're playing on words now. The original point is you cannot leave an eval with last. Otherwise this should work:

    for (1..100) { eval { if ($_ % 2 == 0) { last; } print $_, "\n"; }; }

    and expect it to print only odd numbers.

    --
    Leviathan.
      You're playing on words now. The original point is you cannot leave an eval with last.

      You are right that words are our problem. My original point was that you can leave eval with last. My perception of "leave" is that you stop executing the commands in eval{}. Your perception of leave appears to be to jump right to the end of the eval{} block.

      It's like this: If you step out of your front door, you leave the house. But if you teleport to your friend's, you leave your house, too, don't you.

      In fact, you can "leave" eval{} using die, too.

        My perception of "leave" is that you stop executing the commands in eval{}

        You can do that, but as a side effect you also get to leave any surrounding block.

        In fact, you can "leave" eval{} using die, too.

        But that doesn't make you leave the surrounding "script" :) So it's saner to leave eval with a die rather than a last.

        --
        Leviathan.