in reply to Re: Is { } an empty block or a bug in perl?
in thread Is { } an empty block or a bug in perl?

A {} by itself, I agree, but when you're given something like {}{} and somebody tells you it's valid code, do you think those are two empty blocks, one empty block and one hashref (in either order), or complain that it looks like two hashrefs and the code is wrong?

Replies are listed 'Best First'.
Re^3: Is { } an empty block or a bug in perl?
by Joost (Canon) on Jul 06, 2005 at 13:59 UTC
      warning: nerdy nitpick ahead :)

      I would argue that {;} is not an empty block. I think it's analagous to a set that contains the empty set as it's only element.

      but i don't think the compiler makes the distinction.. perl -MO=Terse -e 'if(1){;}' and perl -MO=Terse -e 'if(1){}' given identical output.
        Using if here is a poor example, since since a block is required by if's syntax. (This ins't C.) Also, compare
        { print '!'; redo; }
        to
        if (1) { print '!'; redo; }
      it would would be useless

      That doesn't matter.

      despite what people would tell you

      That doesn't matter either.

      IMHO, it is valid code. Look at it this way:

      # block #1 { } # block #2 { }

      See? Two empty blocks waiting for code. It is valid.

      Just because no one in their perfect state of mind would use that doesn't make it invalid.

        You are mistaken:

        /////
        is valid,
        {}{}
        is not :-)

        The fact that it looks valid doesn't make it valid. The perl interpreter gets to decide. There is no ANSI perl :-) Now, I agree that your construct could be made valid, but there are other situations to consider:

        # hash #1 { }

        What about this? Is this a block or a hash? Current semantics say it's a hashref, your interpretation says its a block. Or do you really want this to be an empty block only when it's followed by another block? Would that help catch typos or would it confuse people even more than the current semantics? I must say I'm not sure.

        Well if you feel that strongly about it, submit a patch to make it legal, explaining your reasons and showing it breaks nothing else in perl extensive test harness, then wait for it to be accepted.

        ...it is better to be approximately right than precisely wrong. - Warren Buffet