Perl / perl5

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

Documentation for => needs clarifying? #37

Closed p5pRT closed 20 years ago

p5pRT commented 24 years ago

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

Searchable as RT838$

p5pRT commented 24 years ago

From garethr@cre.canon.co.uk

The following program​:

  #!perl -w   %a = ( one => 1 );   %b = ( one   => 1 );

produces the output

  Unquoted string "one" may clash with future reserved word at /tmp/test.pl line 4.

It appears that the auto-quoting behaviour of the => operator does not work if a newline intervenes between the unquoted word and the =>.

The perlop manpage just says

  The => digraph is mostly just a synonym for the comma   operator. It's useful for documenting arguments that come   in pairs. As of release 5.001\, it also forces any word to   the left of it to be interpreted as a string.

If the behaviour of => is left unchanged\, this should be changed to something like

  it also forces an unquoted word to   the left of it on the same line to be interpreted as a string.

Alternatively\, the behaviour of => could be changed so that any amount of whitespace can intervene between the unquoted word and the operator.

Perl Info ``` Site configuration information for perl 5.00502: Configured by abw at Thu Nov 19 10:50:08 GMT 1998. Summary of my perl5 (5.0 patchlevel 5 subversion 2) configuration: Platform: osname=solaris, osvers=2.6, archname=sun4-solaris uname='sunos bandanna 5.6 generic_105181-03 sun4u sparc sunw,ultra-1 ' hint=previous, useposix=true, d_sigaction=define usethreads=undef useperlio=undef d_sfio=undef Compiler: cc='gcc', optimize='-O', gccversion=2.8.0 cppflags='-I/opt/gnu/include -I/user/perl/build/include' ccflags ='-I/opt/gnu/include -I/user/perl/build/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=n, prototype=define Linker and Libraries: ld='gcc', ldflags ='-L/opt/gnu/lib -L/user/perl/build/lib' libpth=/opt/gnu/lib /lib /usr/lib /usr/ccs/lib /user/perl/build/lib libs=-lsocket -lnsl -lgdbm -ldl -lm -lc -lcrypt -ldb libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-fPIC', lddlflags='-G -L/opt/gnu/lib -L/user/perl/build/lib' Locally applied patches: @INC for perl 5.00502: /apps/perl5/lib/5.00502/sun4-solaris /apps/perl5/lib/5.00502 /apps/perl5/lib/site_perl/5.005/sun4-solaris /apps/perl5/lib/site_perl/5.005 . Environment for perl 5.00502: HOME=/user/garethr LANG=C LOGDIR (unset) PERL_BADLANG (unset) SHELL=/cre/bin/bash ```
p5pRT commented 24 years ago

From [Unknown Contact. See original ticket]

Here's the sample code​:

  %a = (one => 1); # no warning   %a = (one   => 1); # warning about "bareword interpreted..."

This should be fixed in the tokenizer and not the documentation. Any takers?

Nat

p5pRT commented 24 years ago

From [Unknown Contact. See original ticket]

Nathan Torkington wrote​:

Here's the sample code​:

%a = (one => 1); # no warning %a = (one => 1); # warning about "bareword interpreted..."

This should be fixed in the tokenizer and not the documentation. Any takers?

This works for small values of tested. I leave possible side effect prevention to someone who knows what they're doing.

Rick

*** perl-5.5.670/toke.c.old Sat Feb 26 00​:24​:50 2000 --- perl-5.5.670/toke.c Wed Mar 22 12​:07​:18 2000 *************** *** 3767\,3776 ****   }   }  
- /* If followed by a paren\, it's certainly a subroutine. */  
  PL_expect = XOPERATOR;   s = skipspace(s);   if (*s == '(') {   CLINE;   if (gv && GvCVu(gv)) { --- 3767\,3785 ----   }   }  
 
  PL_expect = XOPERATOR;   s = skipspace(s); + + /* Is this a word before a => operator? */ + if (strnEQ(s\,"=>"\,2)) { + CLINE; + yylval.opval = (OP*)newSVOP(OP_CONST\, 0\, newSVpv(PL_tokenbuf\,0)); + yylval.opval->op_private = OPpCONST_BARE; + TERM(WORD); + } + + /* If followed by a paren\, it's certainly a subroutine. */   if (*s == '(') {   CLINE;   if (gv && GvCVu(gv)) {

p5pRT commented 20 years ago

From The RT System itself

Fixed by Change 5977 4/27 in perl current