Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eof argument list context is broken #15707

Open
p5pRT opened this issue Nov 12, 2016 · 3 comments
Open

eof argument list context is broken #15707

p5pRT opened this issue Nov 12, 2016 · 3 comments

Comments

@p5pRT
Copy link

p5pRT commented Nov 12, 2016

Migrated from rt.perl.org#130077 (status was 'open')

Searchable as RT130077$

@p5pRT
Copy link
Author

p5pRT commented Nov 12, 2016

From @mauke

Created by @mauke

$ perl -wE 'say prototype "CORE​::eof"'
;*

eof claims to take a single (optional) scalar argument.

$ perl -wE 'sub foo (;*); foo("a", "b", "c")'
Too many arguments for main​::foo at -e line 1, near ""c")
"
Execution of -e aborted due to compilation errors.

This is what happens when you use the same prototype on a sub.

$ perl -wE 'say eof("a", "b", "c")'
Useless use of a constant ("a") in void context at -e line 1.
Useless use of a constant ("b") in void context at -e line 1.
1

This is what happens when you try it with eof​: Instead of erroring out (too
many arguments) it treats it as a scalar comma operator, throwing all but the
last argument away.

$ perl -MO=Deparse -e 'eof(())'
eof ARGV;
-e syntax OK

... unless the argument is (). Instead of evaluating it in scalar context (and
getting undef), it silently replaces it by ARGV.

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.24.0:

Configured by mauke at Mon May  9 21:21:33 CEST 2016.

Summary of my perl5 (revision 5 version 24 subversion 0) configuration:
   
  Platform:
    osname=linux, osvers=4.4.5-1-arch, archname=i686-linux
    uname='linux simplicio 4.4.5-1-arch #1 smp preempt thu mar 10 07:54:30 cet 2016 i686 gnulinux '
    config_args=''
    hint=previous, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -flto',
    cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion='', gccversion='6.1.1 20160501', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234, doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12, longdblkind=3
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags ='-fstack-protector-strong -L/usr/local/lib -flto'
    libpth=/usr/local/lib /usr/lib/gcc/i686-pc-linux-gnu/6.1.1/include-fixed /usr/lib /lib /usr/local/lib /usr/lib/gcc/i686-pc-linux-gnu/6.1.1/include-fixed /usr/lib
    libs=-lpthread -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
    perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=libc-2.23.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.23'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -flto -L/usr/local/lib -fstack-protector-strong'



@INC for perl 5.24.0:
    /home/mauke/usr/lib/perl5/site_perl/5.24.0/i686-linux
    /home/mauke/usr/lib/perl5/site_perl/5.24.0
    /home/mauke/usr/lib/perl5/5.24.0/i686-linux
    /home/mauke/usr/lib/perl5/5.24.0
    .


Environment for perl 5.24.0:
    HOME=/home/mauke
    LANG=en_US.UTF-8
    LANGUAGE=en_US
    LC_COLLATE=C
    LC_MONETARY=de_DE.UTF-8
    LC_TIME=de_DE.UTF-8
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/mauke/perl5/perlbrew/bin:/home/mauke/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
    PERLBREW_BASHRC_VERSION=0.73
    PERLBREW_HOME=/home/mauke/.perlbrew
    PERLBREW_ROOT=/home/mauke/perl5/perlbrew
    PERL_BADLANG (unset)
    PERL_UNICODE=SAL
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Dec 31, 2016

From @jkeenan

On Sat, 12 Nov 2016 15​:27​:19 GMT, mauke- wrote​:

This is a bug report for perl from l.mai@​web.de,
generated with the help of perlbug 1.40 running under perl 5.24.0.

-----------------------------------------------------------------
[Please describe your issue here]

$ perl -wE 'say prototype "CORE​::eof"'
;*

eof claims to take a single (optional) scalar argument.

$ perl -wE 'sub foo (;*); foo("a", "b", "c")'
Too many arguments for main​::foo at -e line 1, near ""c")
"
Execution of -e aborted due to compilation errors.

This is what happens when you use the same prototype on a sub.

$ perl -wE 'say eof("a", "b", "c")'
Useless use of a constant ("a") in void context at -e line 1.
Useless use of a constant ("b") in void context at -e line 1.
1

This is what happens when you try it with eof​: Instead of erroring out
(too
many arguments) it treats it as a scalar comma operator, throwing all
but the
last argument away.

$ perl -MO=Deparse -e 'eof(())'
eof ARGV;
-e syntax OK

... unless the argument is (). Instead of evaluating it in scalar
context (and
getting undef), it silently replaces it by ARGV.

Is this problem similar to that reported by sprout in https://rt-archive.perl.org/perl5/Ticket/Display.html?id=93992?

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Dec 31, 2016

The RT System itself - Status changed from 'new' to 'open'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants