I don't believe that
while(()) is an example of no expression. Rather,
while(()) evaluates the condition
(), a list of no elements. A list evaluated in scalar conext yields the last element, according to
man perldata:
If you evaluate an array in scalar context, it returns
the length of the array. (Note that this is not true of lists, which return the last value, like the C comma operator, nor of built-in functions, which return
whatever they feel like returning.)
What's the "last value" of an empty list? Experiments indicate that it's
undef, a false value,
so the while-loop doesn't loop.