Closed p5pRT closed 20 years ago
I wonder why perl stumbles over string literals in certain map contexts\, so that\, e.g.:
@x = map { ''\, 1 } @y;
is considered a syntax error\, whereas:
@x = map { 1\, '' } @y;
works just fine. I observed this behaviour with versions 5.000 through 5.00503.
Site configuration information for perl 5.00503:
Configured by borchert at Fri Aug 13 13:49:21 MET DST 1999.
Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration: Platform: osname=solaris\, osvers=2.5.1\, archname=sun4-solaris uname='sunos turing 5.5.1 generic_103640-23 sun4u sparc sunw\,ultra-enterprise ' hint=recommended\, useposix=true\, d_sigaction=define usethreads=undef useperlio=undef d_sfio=undef Compiler: cc='cc'\, optimize='-O'\, gccversion= cppflags='-I/usr/local/include' ccflags ='-I/usr/local/include' stdchar='unsigned char'\, d_stdstdio=define\, usevfork=false intsize=4\, longsize=4\, ptrsize=4\, doublesize=8 d_longlong=define\, longlongsize=8\, d_longdbl=define\, longdblsize=16 alignbytes=8\, usemymalloc=y\, prototype=define Linker and Libraries: ld='cc'\, ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib libs=-lsocket -lnsl -lgdbm -ldl -lm -lc -lcrypt libc=/lib/libc.so\, so=so\, useshrplib=false\, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs\, dlext=so\, d_dlsymun=undef\, ccdlflags=' ' cccdlflags='-KPIC'\, lddlflags='-G -L/usr/local/lib'
Locally applied patches:
@INC for perl 5.00503: /usr/local/perl5.005_03/lib/5.00503/sun4-solaris /usr/local/perl5.005_03/lib/5.00503 /usr/local/perl5.005_03/lib/site_perl/5.005/sun4-solaris /usr/local/perl5.005_03/lib/site_perl/5.005 .
Environment for perl 5.00503: HOME=/home/turing/martin LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH=/usr/openwin/lib:/usr/local/lib/x11 LOGDIR (unset) PATH=:/home/turing/martin/bin:/usr/local/games:/usr/games:/usr/local/bin:/usr/openwin/bin:/usr/openwin/bin/xview:/opt/X11R5/bin:/usr/openwin/demo:/usr/bin:/usr/ccs/bin:/usr/ucb:/home/turing/martin/wonders/dq/bin PERL_BADLANG (unset) SHELL=ksh
On Tue\, Sep 07\, 1999 at 03:10:58PM +0200\, Martin Hasch wrote:
I wonder why perl stumbles over string literals in certain map contexts\, so that\, e.g.:
@​x = map \{ ''\, 1 \} @​y;
is considered a syntax error\, whereas:
@​x = map \{ 1\, '' \} @​y;
works just fine. I observed this behaviour with versions 5.000 through 5.00503.
Because perl doesn't know whether the { } is a block or an anonymous hash constructor. If the contents of { } begin with a string literal followed by a comma\, perl assumes that it is an anonymous hash constructor; otherwise\, perl assumes it is a block. Sometimes the programmer needs to disambiguate the code to keep perl from guessing incorrectly.
Ronald
Migrated from rt.perl.org#1331 (status was 'resolved')
Searchable as RT1331$