develooper Front page | perl.perl5.porters | Postings from October 2011

[perl #102486] strict subs fails with lvalue subroutines

Thread Previous
From:
Eric Strom
Date:
October 30, 2011 01:34
Subject:
[perl #102486] strict subs fails with lvalue subroutines
Message ID:
rt-3.6.HEAD-31297-1319938519-1855.102486-75-0@perl.org
# New Ticket Created by  Eric Strom 
# Please include the string:  [perl #102486]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=102486 >


Subject: strict subs fails with lvalue subroutines
Message-Id: <5.15.3_4541_1318900144@linux-op1p>
Reply-To: asg@cpan.org
To: perlbug@perl.org
From: asg@cpan.org


This is a bug report for perl from asg@cpan.org,
generated with the help of perlbug 1.39 running under perl 5.15.3.


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

the test file:

   #!/usr/bin/env perl

   use warnings;
   use strict;

   print "perl v$]\n---\n";

   sub abc_string {
       my $x = die 'abc_string called';
   }
   sub abc_string_lvalue :lvalue {
       my $x = die 'abc_string_lvalue called';
   }
   sub abc {
       my $x = "abc_string@_";
       &$x
   }
   sub abc_lvalue :lvalue {
       my $x = "abc_string@_";
       &$x
   }
   eval {abc                 ; 1} or print "abc died:                  $@\n";
   eval {abc_lvalue          ; 1} or print "abc_lvalue died:           $@\n";
   eval {abc        '_lvalue'; 1} or print "abc 'lvalue' died:         $@\n";
   eval {abc_lvalue '_lvalue'; 1} or print "abc_lvalue '_lvalue' died: $@\n";

results in:

   perl v5.015003
   ---
   abc died:                  Can't use string ("abc_string") as a
subroutine ref while "strict refs" in use at test.pl line 16.

   abc_lvalue died:           Can't modify non-lvalue subroutine call
at test.pl line 20.

   abc 'lvalue' died:         Can't use string ("abc_string_lvalue")
as a subroutine ref while "strict refs" in use at test.pl line 16.

   abc_lvalue '_lvalue' died: abc_string_lvalue called at test.pl line 12.

---

the two abc_lvalue() calls should die from "strict refs" but instead both
continue past and fail for other reasons.

the bug has been observed in perl 5.10.1 and 5.15.3 (the latter of which is
shown below).


[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
   category=library
   severity=high
   module=strict
---
Site configuration information for perl 5.15.3:

Configured by asg at Fri Oct 14 03:28:43 EDT 2011.

Summary of my perl5 (revision 5 version 15 subversion 3) configuration:
 Commit id: 1aa032b25ab39eebe4a452ff935a39107a322a5b
 Platform:
   osname=linux, osvers=2.6.37.6-0.7-desktop, archname=i686-linux
   uname='linux linux-op1p 2.6.37.6-0.7-desktop #1 smp preempt
2011-07-21 02:17:24 +0200 i686 i686 i386 gnulinux '
   config_args=''
   hint=recommended, useposix=true, d_sigaction=define
   useithreads=undef, usemultiplicity=undef
   useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
   use64bitint=undef, use64bitall=undef, uselongdouble=undef
   usemymalloc=n, bincompat5005=undef
 Compiler:
   cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
   optimize='-O2',
   cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
   ccversion='', gccversion='4.5.1 20101208 [gcc-4_5-branch revision
167585]', 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 =' -fstack-protector -L/usr/local/lib'
   libpth=/usr/local/lib /lib /usr/lib
   libs=-lnsl -ldl -lm -lcrypt -lutil -lc
   perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
   libc=/lib/libc-2.11.3.so, so=so, useshrplib=false, libperl=libperl.a
   gnulibc_version='2.11.3'
 Dynamic Linking:
   dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
   cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib
-fstack-protector'

Locally applied patches:


---
@INC for perl 5.15.3:
   /usr/local/lib/perl5/site_perl/5.15.3/i686-linux
   /usr/local/lib/perl5/site_perl/5.15.3
   /usr/local/lib/perl5/5.15.3/i686-linux
   /usr/local/lib/perl5/5.15.3
   /usr/local/lib/perl5/site_perl/5.14.2
   /usr/local/lib/perl5/site_perl
   .

---
Environment for perl 5.15.3:
   HOME=/storage/asg
   LANG=en_US.UTF-8
   LANGUAGE=
   LD_LIBRARY_PATH (unset)
   LOGDIR (unset)
   PATH=/storage/asg/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/jvm/jre/bin
   PERL_BADLANG (unset)
   SHELL=/bin/bash


Thread Previous


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