develooper Front page | perl.perl5.porters | Postings from November 2017

[perl #132485] Old package separator syntax

Thread Previous | Thread Next
From:
Ed Avis
Date:
November 22, 2017 16:04
Subject:
[perl #132485] Old package separator syntax
Message ID:
rt-4.0.24-6514-1511366645-1178.132485-75-0@perl.org
# New Ticket Created by  "Ed Avis" 
# Please include the string:  [perl #132485]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=132485 >


For a long time the normal way to write the package separator in variable names has been :: but the older ' form is still accepted.

(I believe that the newer form came in with Perl 5 but I am not sure; anyhow it certainly predates my first use of Perl twenty years ago.)



A gotcha with ' has long been mentioned in the Camel book:



    "This is $owner's house"



That parses the same as $owner::s and you get a warning at run time, so you can work out what is going on, but it is quite strange if you didn't know about the old ' package separator syntax.  (I did know about it but I still fell into the trap of writing code like the

above.)



Might it be time to mark the old package separator as deprecated?

That would allow a compile time (rather than run time) diagnostic on the use of it.  Eventually, once the old syntax is removed, "$owner's house" would work as expected.



The suggestion to deprecate things can trigger fierce discussion, so as a fallback position I would advocate a warning when the '

form is used inside a doublequote-interpolated string.



---

Flags:

    category=core

    severity=low

---

Site configuration information for perl 5.22.2:



Configured by Red Hat, Inc. at Fri Nov  4 14:35:02 UTC 2016.



Summary of my perl5 (revision 5 version 22 subversion 2) configuration:



  Platform:

    osname=linux, osvers=4.7.9-200.fc24.x86_64, archname=x86_64-linux-thread-multi

    uname='linux buildvm-12.phx2.fedoraproject.org 4.7.9-200.fc24.x86_64 #1 smp thu oct 20 14:26:16 utc 2016 x86_64 x86_64 x86_64 gnulinux '

    config_args='-des -Doptimize=none -Dccflags=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -Dldflags=-Wl,-z,relro  -Dccdlflags=-Wl,--enable-new-dtags -Wl,-z,relro  -Dlddlflags=-shared -Wl,-z,relro  -Dshrpdir=/usr/lib64 -DDEBUGGING=-g -Dversion=5.22.2 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5 -Dsitearch=/usr/local/lib64/perl5 -Dprivlib=/usr/share/perl5 -Dvendorlib=/usr/share/perl5/vendor_perl -Darchlib=/usr/lib64/perl5 -Dvendorarch=/usr/lib64/perl5/vendor_perl -Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithreads -Dusedtrace=/usr/bin/dtrace -Duselargefiles -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallu
 srbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dscriptdir=/usr/bin -Dusesitecustomize'

    hint=recommended, useposix=true, d_sigaction=define

    useithreads=define, usemultiplicity=define

    use64bitint=define, use64bitall=define, uselongdouble=undef

    usemymalloc=n, bincompat5005=undef

  Compiler:

    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',

    optimize='  -g',

    cppflags='-D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fwrapv -fno-strict-aliasing -I/usr/local/include'

    ccversion='', gccversion='5.3.1 20160406 (Red Hat 5.3.1-6)', gccosandvers=''

    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3

    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3

    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8

    alignbytes=8, prototype=define

  Linker and Libraries:

    ld='gcc', ldflags ='-Wl,-z,relro  -fstack-protector-strong -L/usr/local/lib'

    libpth=/usr/local/lib64 /lib64 /usr/lib64 /usr/local/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib

    libs=-lpthread -lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat

    perllibs=-lpthread -lresolv -lnsl -ldl -lm -lcrypt -lutil -lc

    libc=libc-2.22.so, so=so, useshrplib=true, libperl=libperl.so

    gnulibc_version='2.22'

  Dynamic Linking:

    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,--enable-new-dtags -Wl,-z,relro '

    cccdlflags='-fPIC', lddlflags='-shared -Wl,-z,relro  -L/usr/local/lib -fstack-protector-strong'



Locally applied patches:

    Fedora Patch1: Removes date check, Fedora/RHEL specific

    Fedora Patch3: support for libdir64

    Fedora Patch4: use libresolv instead of libbind

    Fedora Patch5: USE_MM_LD_RUN_PATH

    Fedora Patch6: Skip hostname tests, due to builders not being network capable

    Fedora Patch7: Dont run one io test due to random builder failures

    Fedora Patch15: Define SONAME for libperl.so

    Fedora Patch16: Install libperl.so to -Dshrpdir value

    Fedora Patch22: Document Math::BigInt::CalcEmu requires Math::BigInt (CPAN RT#85015)

    Fedora Patch26: Make *DBM_File desctructors thread-safe (RT#61912)

    Fedora Patch27: Make PadlistNAMES() lvalue again (CPAN RT#101063)

    Fedora Patch28: Make magic vtable writable as a work-around for Coro (CPAN RT#101063)

    Fedora Patch29: Fix duplicating PerlIO::encoding when spawning threads (RT#31923)

    Fedora Patch30: Do not let XSLoader load relative paths (CVE-2016-6185)

    Fedora Patch31: Avoid loading optional modules from default . (CVE-2016-1238)

    Fedora Patch32: Fix a crash in lexical scope warnings (RT#128597)

    Fedora Patch33: Do not mangle errno from failed socket calls (RT#128316)

    Fedora Patch34: Fix crash in "evalbytes S" (RT#129196)

    Fedora Patch35: Fix crash in "evalbytes S" (RT#129196)

   Fedora Patch36: Fix crash in "evalbytes S" (RT#129196)

    Fedora Patch37: Fix crash in splice (RT#129164, RT#129166, RT#129167)

    Fedora Patch38: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)

    Fedora Patch39: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)

    Fedora Patch40: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)

    Fedora Patch41: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)

    Fedora Patch42: Fix string overrun in Perl_gv_fetchmethod_pvn_flags (RT#129267)

    Fedora Patch43: Fix crash when matching UTF-8 string with non-UTF-8 substrings (RT#129350)

    Fedora Patch44: Fix parsing perl options in shell bang line (RT#129336)

    Fedora Patch45: Fix firstchar bitmap under UTF-8 with prefix optimization (RT#129950)

    Fedora Patch46: Avoid infinite loop in h2xs tool if enum and type have the same name (RT130001)

    Fedora Patch47: Fix stack handling when calling chdir without an argument (RT#129130)

    Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux

    Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux



---

@INC for perl 5.22.2:

    /home/eda/lib64/perl5/

    /usr/local/lib64/perl5

    /usr/local/share/perl5

    /usr/lib64/perl5/vendor_perl

    /usr/share/perl5/vendor_perl

    /usr/lib64/perl5

    /usr/share/perl5



---

Environment for perl 5.22.2:

    HOME=/home/eda

    LANG=en_GB.UTF-8

    LANGUAGE (unset)

    LC_COLLATE=C

    LC_CTYPE=en_GB.UTF-8

    LC_MESSAGES=en_GB.UTF-8

    LC_MONETARY=en_GB.UTF-8

    LC_NUMERIC=en_GB.UTF-8

    LC_TIME=en_GB.UTF-8

    LD_LIBRARY_PATH (unset)

    LOGDIR (unset)

    PATH=/home/eda/bin:/home/eda/bin:/home/eda/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/sbin:/home/eda/.local/bin:/home/eda/bin:/sbin:/usr/sbin:/sbin:/usr/sbin

    PERL5LIB=/home/eda/lib64/perl5/

    PERL_BADLANG (unset)

    SHELL=/bin/bash


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About