Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.93k stars 552 forks source link

Lexical analysis of 1-to-many mappings #489

Closed p5pRT closed 20 years ago

p5pRT commented 25 years ago

Migrated from rt.perl.org#1331 (status was 'resolved')

Searchable as RT1331$

p5pRT commented 25 years ago

From martin@mathematik.uni-ulm.de


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

p5pRT commented 25 years ago

From @tamias

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