SPUG: interesting while() behavior and hosting recs

Tim Maher tim at consultix-inc.com
Fri Oct 1 12:46:36 CDT 2004

On Fri, Oct 01, 2004 at 08:25:02AM -0700, DeRykus, Charles E wrote:
> But, as we've seen Joel's post, the effects of a "list in
> scalar context" in a different may altogether different and
> unexpected... ie, while () ... gets parsed as for (;;).
> Charles DeRykus

I've been skimming this thread, but having trouble with
a fundamental element of the discussion. 

Specifically, what qualifies

	while () { statement; }

as having /anything/ to do with the conceptually understandable
(albeit technically non-existent) "list in scalar context"?

Or, for that matter, the parens in while's close relative:

	if () { statement; }

AFAIK, those parens after the keywords are *required elements of
syntax* that have nothing to do with the kind of "list formation"
effect that people associate with expressions like:
	@stuff=();	# empty list

It seems to me that earlier posts are equating the parens in
"while ()..." to those in my empty list example above, which
conflicts with my interpretation that they are merely
syntactic elements after "while".

If they're /not/ syntactic, why can't we write code like this?
	while $foo { statement; }
	while @foo { statement; }
	if 1 { statement; }

(And that code doesn't compile; I checked!)

I'll readily admit that I, like many JAPHs, have some of my own
ways of thinking about Perl that make it easier for me to use, and
to teach, and that usually serve me quite well -- despite their
technically being over-simplifications of Perl's (twisted)
reality. 8-}

As a case in point, I offer the widespread notion that parens
function as "list constructors" in expressions like
"@array=(1,2)" and "print (1,2)", which is tremendously useful,
despite being less than a perfectly accurate representation of
how those expressions are actually parsed and evaluated, IIRC.
(What's the real story? Is it that the comma operator in list
context returns all the expressions, so the parens are just there
for reasons of precedence in the case of an assignment?)

Surely, even in Perl, there are some elements of basic syntax
that can be trusted to have concrete meanings -- like while's
parens; aren't there? 8-}

| Tim Maher, CEO     (206) 781-UNIX      (866) DOC-PERL     (866) DOC-UNIX |
| tim(AT)Consultix-Inc.Com  http://TeachMePerl.Com  http://TeachMeUnix.Com |
| Watch for my upcoming book: "Minimal Perl for Shell Users & Programmers" |
| Classes! 10/4: UNIX Fundamentals  11/30: Perl  12/6: Shell & Utilities   |

More information about the spug-list mailing list