From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

Return-Path: <richard@tmtowtdi.perl.org>
Mailing-List: contact perl5-porters-help@perl.org; run by ezmlm
Delivered-To: mailing list perl5-porters@perl.org
Received: (qmail 9800 invoked by uid 511); 19 Nov 1999 21:17:10 -0000
Subject: null conditionals should not be allowed
Sender: schwern@athens.arena-i.com
To: perlbug@perl.org
From: perlbug_test@rfi.net
Received: (qmail 9792 invoked by uid 508); 19 Nov 1999 21:17:09 -0000
Content-Type: text/plain; charset=us-ascii
User-Agent: Mutt/1.0i
Mime-Version: 1.0
Date: Fri, 19 Nov 1999 16:17:04 -0500
Message-Id: <19991119161704.ABCDE@bugs.perl.org>
X-Matches: category\=install osname\=win32
For some reason, Perl accepts a while loop with an empty conditional.
while ( ) { print "TRUE"; sleep 1; }
results in a big list of TRUEs. This is odd in several ways:
1) Everything else (until, if, unless...) is a syntax error with an
empty condition.
2) The empty condition of a while loop is TRUE! If anything I would
expect false.
3) There's no warning.
At minimum there should be a warning, at best it should be made a
syntax error.
This looks like a documentation problem.
Here's another intersting problem:
do { print "TRUE"; sleep 1 } while ();
This produces one iteration of TRUE.
do { print "TRUE"; sleep 1 } until ();
This produces an infinite loop.
Again, the oddness:
1) Unlike with while () {...}, the null condition is false!
2) Again, no warning.
IMHO do {...} while () and do {...} until () should both be syntax
errors, or at least warnings.
Unless there's a backwards compatibility issue, all instances of an
empty conditional should probably be a syntax error. I can't think of
any time when it would be useful.
If I'm feeling brave I'll submit a patch.
PS This problem occurs under 5.005_03 and 5.005_62
Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
Platform:
osname=win32, osvers=2.2.7, archname=i686-linux
category=install
uname='linux athens 2.2.7 #2 smp mon may 10 23:17:01 edt 1999 i686 unknown '
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef useperlio=undef d_sfio=undef
Compiler:
cc='gcc', optimize='-O6', gccversion=egcs-2.91.66 19990314 (egcs-1.1.2 release)
cppflags='-Dbool=char -DHAS_BOOL -I/usr/local/include'
ccflags ='-Dbool=char -DHAS_BOOL -I/usr/local/include'
stdchar='char', d_stdstdio=undef, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
alignbytes=4, usemymalloc=y, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
libc=, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Built under linux
Compiled at Jul 29 1999 00:29:00
%ENV:
PERL5LIB="/home/schwern/lib/perl5/site_perl/5.005:/web/sites/test/mp"
@INC:
/home/schwern/lib/perl5/site_perl/5.005/i686-linux
/home/schwern/lib/perl5/site_perl/5.005
/web/sites/test/mp
/usr/lib/perl5/i686-linux
/usr/lib/perl5
/usr/lib/perl5/site_perl/5.005/i686-linux
/usr/lib/perl5/site_perl/5.005
.
Summary of my perl5 (revision 5.0 version 5 subversion 62) configuration:
Platform:
osname=linux, osvers=2.2.10, archname=i686-linux
uname='linux athens 2.2.10 #3 smp mon aug 2 16:48:09 edt 1999 i686 unknown '
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef useperlio=undef d_sfio=undef
use64bits=undef usemultiplicity=undef
Compiler:
cc='cc', optimize='-g', gccversion=2.95.2 19990906 (prerelease)
cppflags='-Dbool=char -DHAS_BOOL -DDEBUGGING -I/usr/local/include -DDEBUGGING_OPS -DDEBUGGING_MSTATS -fno-strict-aliasing'
ccflags ='-Dbool=char -DHAS_BOOL -DDEBUGGING -I/usr/local/include -DDEBUGGING_OPS -DDEBUGGING_MSTATS -fno-strict-aliasing'
stdchar='char', d_stdstdio=define, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
alignbytes=4, usemymalloc=y, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
libc=/lib/libc-2.1.2.so, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: DEBUGGING
Built under linux
Compiled at Oct 16 1999 16:16:24
%ENV:
PERL5LIB="/home/schwern/lib/perl5/site_perl/5.005:/web/sites/test/mp"
@INC:
/home/schwern/lib/perl5/site_perl/5.005/i686-linux
/home/schwern/lib/perl5/site_perl/5.005
/web/sites/test/mp
/usr/local/perl5.005_62/lib/5.00562/i686-linux
/usr/local/perl5.005_62/lib/5.00562
/usr/local/perl5.005_62/lib/site_perl/5.00562/i686-linux
/usr/local/perl5.005_62/lib/site_perl
.
--
Michael G Schwern schwern@pobox.com
/(?:(?:(1)[.-]?)?\(?(\d{3})\)?[.-]?)?(\d{3})[.-]?(\d{4})(x\d+)?/i