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

Warning about scalar @a[$b] triggered in list context #7554

Open
p5pRT opened this issue Oct 22, 2004 · 4 comments
Open

Warning about scalar @a[$b] triggered in list context #7554

p5pRT opened this issue Oct 22, 2004 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Oct 22, 2004

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

Searchable as RT32083$

@p5pRT
Copy link
Author

p5pRT commented Oct 22, 2004

From @chipdude

Created by chip@pobox.com

The warning about @​a[$b] being better written as $a[$b] is triggering
even in list context, which is wrong.

  $ perl -wle 'my ($a) = @​ARGV[0]'
  Scalar value @​ARGV[0] better written as $ARGV[0] at -e line 1.

It's quite plausible to have a one-element array slice if you're
planning on extending the slice later. Consider a POE sub arg list​:

  sub state {
  my ($self) = @​_[OBJECT];
  # ...
  }

You wouldn't want to make that a $, because if you added another
subscript, the slice would silently fail​:

  sub state {
  my ($self, $arg) = $_[OBJECT, ARG0]; # OOPS BUG HERE
  # ...
  }

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl v5.8.4:

Configured by Debian Project at Sun Sep 26 12:11:30 CEST 2004.

Summary of my perl5 (revision 5 version 8 subversion 4) configuration:
  Platform:
    osname=linux, osvers=2.6.8-1-686, archname=i386-linux-thread-multi
    uname='linux cachaca 2.6.8-1-686 #1 sat aug 28 14:11:39 edt 2004 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.4 -Dsitearch=/usr/local/lib/perl/5.8.4 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.4 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='3.3.4 (Debian 1:3.3.4-12)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=true, libperl=libperl.so.5.8.4
    gnulibc_version='2.3.2'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    


@INC for perl v5.8.4:
    /etc/perl
    /usr/local/lib/perl/5.8.4
    /usr/local/share/perl/5.8.4
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.8
    /usr/share/perl/5.8
    /usr/local/lib/site_perl
    /usr/local/share/perl/5.8.3
    /usr/local/share/perl/5.8.2
    /usr/local/share/perl/5.8.1
    /usr/local/share/perl/5.8.0
    .


Environment for perl v5.8.4:
    HOME=/u/home/chip
    LANG (unset)
    LANGUAGE (unset)
    LC_CTYPE=en_US.ISO-8859-1
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/u/home/chip/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
    PERL_BADLANG (unset)
    SHELL=/bin/zsh

@p5pRT
Copy link
Author

p5pRT commented Nov 13, 2009

From @xdg

Still exists on 5.11.1

@p5pRT
Copy link
Author

p5pRT commented Nov 13, 2009

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

@p5pRT
Copy link
Author

p5pRT commented Jan 20, 2012

From @cpansprout

On Thu Oct 21 19​:16​:41 2004, chip wrote​:

The warning about @​a[$b] being better written as $a[$b] is triggering
even in list context, which is wrong.

$ perl \-wle 'my \($a\) = @​ARGV\[0\]'
Scalar value @​ARGV\[0\] better written as $ARGV\[0\] at \-e line 1\.

It's quite plausible to have a one-element array slice if you're
planning on extending the slice later. Consider a POE sub arg list​:

sub state \{
    my \($self\) = @​\_\[OBJECT\];
    \# \.\.\.
\}

You wouldn't want to make that a $, because if you added another
subscript, the slice would silently fail​:

sub state \{
    my \($self\, $arg\) = $\_\[OBJECT\, ARG0\];   \# OOPS BUG HERE
    \# \.\.\.
\}

This is one of my pet peeves. It’s the bareword it shouldn’t be warning
about. Whether it should warn for @​_[0] in list context is slightly
more debatable.

--

Father Chrysostomos

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