[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
[ID 20000124.006] variable type in (?{ code }) construction
This is a bug report for perl from ishisone@sra.co.jp,
generated with the help of perlbug 1.27 running under perl 5.00503.
-----------------------------------------------------------------
If variable interpolation takes place in a regular expression,
perl seems to consider lexical variables in (?{ code }) construct
as global variables.
The following little script exhibits the problem:
-----------------------------------------------------------
#! /usr/local/bin/perl -w
use strict;
use re 'eval';
my ($a, $x, $y) = ('a', 0, 0);
$_ = 'a';
# No variable interpolation occurs in RE.
# This will print "$x=1" as expected.
/ a (?{ $x = 1 }) /xo and print "\$x=$x\n";
# A variable interpolation occurs in RE.
# This will print "$y=0, $::y=1" which seems to be a bug.
/ $a (?{ $y = 1 }) /xo and print "\$y=$y, \$::y=$::y\n";
-----------------------------------------------------------
The output is:
Name "main::y" used only once: possible typo at ./rebug.pl line 15.
$x=1 <-- seems OK
$y=0, $::y=1 <-- seems wrong
Both $x and $y are lexical, but when evaluating the second RE,
assignment is done to the global variable $::y.
I also checked with 5.00563, and got the same result.
-----------------------------------------------------------------
---
This perlbug was built using Perl 5.00503 - Wed May 19 12:05:03 JST 1999
It is being executed now by Perl 5.00563 - Tue Jan 25 12:05:18 JST 2000.
Site configuration information for perl 5.00503:
Configured by ishisone at Wed May 19 12:05:03 JST 1999.
Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
Platform:
osname=freebsd, osvers=2.2.8-release, archname=i386-freebsd
uname='freebsd srapc459.sra.co.jp 2.2.8-release freebsd 2.2.8-release #0: fri apr 16 11:14:40 jst 1999 ishisone@srapc459.sra.co.jp:usrsrcsyscompilesrapc459_slim i386 '
hint=previous, useposix=true, d_sigaction=define
usethreads=undef useperlio=undef d_sfio=undef
Compiler:
cc='cc', optimize='-O', gccversion=2.7.2.1
cppflags='-I/usr/local/include'
ccflags ='-I/usr/local/include'
stdchar='char', d_stdstdio=undef, usevfork=true
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='ld', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-lm -lxpg4 -lc -lcrypt
libc=/usr/lib/libc.so.3.1, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-DPIC -fpic', lddlflags='-Bshareable -L/usr/local/lib'
Locally applied patches:
---
@INC for perl 5.00503:
/amd/a/srapc451/mnt3/home/mgr/ishisone/lib/perl5
/usr/local/lib/perl5/5.00503/i386-freebsd
/usr/local/lib/perl5/5.00503
/usr/local/lib/perl5/site_perl/5.005/i386-freebsd
/usr/local/lib/perl5/site_perl/5.005
.
---
Environment for perl 5.00503:
HOME=/amd/a/srapc451/mnt3/home/mgr/ishisone
LANG=ja_JP.EUC
LANGUAGE (unset)
LC_COLLATE=C
LC_TIME=C
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/amd/a/srapc451/mnt3/home/mgr/ishisone/bin:/amd/a/srapc451/mnt3/home/mgr/ishisone/bin/i386-freebsd2:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/sra/bin:/usr/local/tdoc/bin:/usr/local/emacs/bin:/usr/new/mh:/usr/local/bin/mh:/usr/local/v6/bin:/usr/local/v6/sbin:/usr/ucb:/usr/bin:/usr/new:/bin:/etc:/usr/etc:/usr/sbin:/sbin:/amd/a/srapc451/mnt3/home/mgr/ishisone/bin/lastresort:
PERL5LIB=/amd/a/srapc451/mnt3/home/mgr/ishisone/lib/perl5
PERL_BADLANG (unset)
SHELL=/usr/local/bin/bash
- Follow-Ups from:
-
Ilya Zakharevich <ilya@math.ohio-state.edu>
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]