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

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.

Replies are listed 'Best First'.
Re^5: Is { } an empty block or a bug in perl?
by Joost (Canon) on Jul 06, 2005 at 14:33 UTC
      I wasn't commenting on your perl usage in any way -- in {;} the semicolon does make it clear that it is not supposed to be a hashref.

      I was just making a dumb point of comparing it to set logic, where if you have a set w/nothing in it, then there's something in it.

      In set logic, there's the EmptySet which I'll represent as 0. 0 is {}. So a set {} is the empty set. A set {1,2,3} has 3 elements in it and is non-empty. The set { 0 } is also non-empty, even though its only element is the empty set.

      So the parallel i had in my mind was something like this:
      PerlSet LogicDescription
      {} (or ;){} (or 0)Emtpy set/statement
      {;}{ 0 }A set containing the empty set; therefore non-empty

      I guess you could use the exampe of /dev/null -- that's really a nothing file, but the array @f = ( '/dev/null' ) is non-empty. Blah--now that i typed it, i don't like that example.

      Anyways, i'll stop rambling now.. ;)
Re^5: Is { } an empty block or a bug in perl?
by ikegami (Patriarch) on Jul 06, 2005 at 18:22 UTC
    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; }