Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.9k stars 540 forks source link

regext fails to recognize a specific pattern for grouped substition #10944

Closed p5pRT closed 13 years ago

p5pRT commented 13 years ago

Migrated from rt.perl.org#81664 (status was 'rejected')

Searchable as RT81664$

p5pRT commented 13 years ago

From ktomasek@intersil.com

this is a bug report for perl from ktomasek@​ausws103.aus.intersil.com\, generated with the help of perlbug 1.39 running under perl 5.12.2.

When grouping from the result of an regex pattern match\, there is a specific pattern which fails to match while another pattern\, which differs by only 2 characters\, will match.

Using the follow command line​:

perl -e 'while(\<>){print $1 if (/\s+\.[A-Z]*\s+\((.*_VCC3I_PadIO).*$/) }' snip.v

the program fails to match and outputs nothing.

while the following command line(s)​:

perl -e 'while(\<>){print $1 if (/\s+\.[A-Z]*\s+\((.*_VCCK_PadIO).*$/) }' snip.v perl -e 'while(\<>){print $1 if (/\s+\.[A-Z]*\s+\((.*_GNDO_PadIO).*$/) }' snip.v

does work and outputs the following​: ADDR0_VCCK_PadIO ADDR0_GNDO_PadIO

the same behaviour is noted when the regex command is included in file and executed as a complete perl script.

the input file called snip.v looks like this​:

  .O (ADDR0_O_PadOut)\,   .GNDI (ADDR0_GNDI_PadIO)\,   .GNDK (ADDR0_GNDK_PadIO)\,   .GNDO (ADDR0_GNDO_PadIO)\,   .IO (ADDR0_IO_PadIO)\,   .VCC3I (ADDR0_VCC3I_PadIO)\,   .VCC3O (ADDR0_VCC3O_PadIO)\,   .VCCK (ADDR0_VCCK_PadIO) );

this behaviour is seen using 5.8.5 which is the system base installation and with 5.12.2 which I freshly downloaded and compiled.


Flags​:   category=core   severity=high


Site configuration information for perl 5.12.2​:

Configured by ktomasek at Wed Dec 15 17​:06​:53 CST 2010.

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

  Platform​:   osname=linux\, osvers=2.6.9-78.0.22.elsmp\, archname=x86_64-linux   uname='linux ausws103 2.6.9-78.0.22.elsmp #1 smp fri apr 24 12​:48​:19 edt 2009 x86_64 x86_64 x86_64 gnulinux '   config_args='-des -Dprefix=/usr/local'   hint=recommended\, useposix=true\, d_sigaction=define   useithreads=undef\, usemultiplicity=undef   useperlio=define\, d_sfio=undef\, uselargefiles=define\, usesocks=undef   use64bitint=define\, use64bitall=define\, uselongdouble=undef   usemymalloc=n\, bincompat5005=undef   Compiler​:   cc='cc'\, ccflags ='-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'\,   optimize='-O2'\,   cppflags='-fno-strict-aliasing -pipe -I/usr/local/include'   ccversion=''\, gccversion='3.4.6 20060404 (Red Hat 3.4.6-10)'\, gccosandvers=''   intsize=4\, longsize=8\, ptrsize=8\, doublesize=8\, byteorder=12345678   d_longlong=define\, longlongsize=8\, d_longdbl=define\, longdblsize=16   ivtype='long'\, ivsize=8\, nvtype='double'\, nvsize=8\, Off_t='off_t'\, lseeksize=8   alignbytes=8\, prototype=define   Linker and Libraries​:   ld='cc'\, ldflags =' -L/usr/local/lib'   libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64 /usr/local/lib64   libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc   perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc   libc=/lib/libc-2.3.4.so\, so=so\, useshrplib=false\, libperl=libperl.a   gnulibc_version='2.3.4'   Dynamic Linking​:   dlsrc=dl_dlopen.xs\, dlext=so\, d_dlsymun=undef\, ccdlflags='-Wl\,-E'   cccdlflags='-fPIC'\, lddlflags='-shared -O2 -L/usr/local/lib'

Locally applied patches​:


@​INC for perl 5.12.2​:   /users/ktomasek/local/lib/perl5/site_perl   /usr/local/lib/perl5/site_perl/5.12.2/x86_64-linux   /usr/local/lib/perl5/site_perl/5.12.2   /usr/local/lib/perl5/5.12.2/x86_64-linux   /usr/local/lib/perl5/5.12.2   .


Environment for perl 5.12.2​:   HOME=/users/ktomasek   LANG=en_US.UTF-8   LANGUAGE (unset)   LD_LIBRARY_PATH=/tools_d2/xilinx/ise12.1/ISE_DS/common/lib/lin64​:/usr/lib​:/usr/X11R6/lib/X11​:/lib​:/usr/local/lib​:/lib​:/usr/local/lib​:/apps/lib​:/apps/tools/svn/lib​:/apps/tools/tcl/lib​:/apps/tools/tk/lib​:/apps/tools/assura/assura3.1.7_linux/tools_d2/assura/lib​:/tools_d2/cds/ccd9.10.400/tools/lib​:/tools_d2/cds/cnfrml8.1.480/tools/lib​:/cad_d2/lib/d2a/cds/pli_x86_64​:/tools_d2/cds/ius81.005/tools/lib​:/tools_d2/cds/ic5141usr5/tools/lib​:/apps/tools/mmsim/mmsim7.20.109_linux/tools/lib​:/tools_d2/cds/pvs9.10.103/tools/lib​:/tools_d2/synopsys/tmax2009.06-SP2/linux/iddq/lib​:/tools_d2/novas/versil201001/share/PLI/ius_vhpi_latest/LINUX64/boot​:/tools_d2/novas/versil201001/share/PLI/ius_vhpi_latest/LINUX/boot​:/tools_d2/xilinx/ise12.1/ISE_DS/common/lib/lin64​:/tools_d2/xilinx/ise12.1/ISE_DS/common/X11R6/lib/lin64   LOGDIR (unset)   PATH=/opt/openoffice.org3/program​:/tools_d2/xilinx/ise12.1/ISE_DS/ISE/bin/lin64​:/tools_d2/xilinx/ise12.1/ISE_DS/common/bin/lin64​:/tools_d2/novas/versil201001/bin​:/tools_d2/synopsys/tmax2009.06-SP2/bin​:/tools_d2/synplicity/fpga_94/bin​:/tools_d2/ssoft/R3.3.12/bin​:/tools_d2/cds/rc9.10.102/tools/bin​:/tools_d2/cds/rc9.10.102/bin​:/tools_d2/cds/edi9.11.000/tools/bin​:/tools_d2/cds/pvs9.10.103/tools/bin​:/tools_d2/synopsys/C-2009.06-SP3/bin​:/apps/tools/mmsim/mmsim7.20.109_linux/tools/dfII/bin​:/apps/tools/mmsim/mmsim7.20.109_linux/tools/bin​:/isil/local/bin​:/tools_d2/mapleSoft/maple9.5/bin​:/tools_d2/cds/ic5141usr5/tools/dfII/bin​:/tools_d2/cds/ic5141usr5/tools/bin​:/tools_d2/cds/ius81.005/tools/bin​:/apps/tools/hspice/hspice_vZ-2007.03-SP1/hspice/bin​:/tools_d2/cds/ets9.11.000/tools/bin​:/tools_d2/cds/ets9.11.000/bin​:/apps/tools/dc/syn_vC-2009.06/bin​:/tools_d2/cds/cnfrml8.1.480/bin​:/tools_d2/cds/ccd9.10.400/bin​:/users/ktomasek/sandbox/toad/latest/tr/bin​:/users/ktomasek/bin​:/apps/tools/tk/bin​:/apps/tools/svn/bin​:/usr/local/bin​:/usr/bin​:/bin​:/usr/X11R6/bin​:/cad_d2/bin​:/apps/tools/assura/assura3.1.7_linux/tools/assura/bin   PERL5LIB=/users/ktomasek/local/lib/perl5/site_perl   PERL_BADLANG (unset)   SHELL=/bin/tcsh

p5pRT commented 13 years ago

From @dgl

Hi\,

I don't think this is a bug​:

On Tue\, Jan 04\, 2011 at 01​:22​:48PM -0800\, Tomasek\, Kevin wrote​: [..]

perl -e 'while(\<>){print $1 if (/\s+\.[A-Z]*\s+\((.*_VCC3I_PadIO).*$/) }' snip.v

The input is​: ".VCC3I (ADDR0_VCC3I_PadIO)\,"

".VCC3I " doesn't match /\.[A-Z]*\s+/; try a character class of [A-Z0-9] maybe.

p5pRT commented 13 years ago

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

p5pRT commented 13 years ago

@dgl - Status changed from 'open' to 'rejected'

p5pRT commented 13 years ago

From @ikegami

On Tue\, Jan 4\, 2011 at 4​:22 PM\, Tomasek\, Kevin \perlbug\-followup@&#8203;perl\.orgwrote​:

Using the follow command line​: perl -e 'while(\<>){print $1 if (/\s+\.[A-Z]*\s+\((.*_VCC3I_PadIO).*$/) }' snip.v the program fails to match and outputs nothing.

[snip]

the input file called snip.v looks like this​:

[snip]

.VCC3I (ADDR0_VCC3I_PadIO)\,

[snip]

This very question has already been answered elsewhere. You're expecting /[A-Z]*/ to match the entirety of "VCC3I"\, but "3" is not an uppercase ASCII letter. If you account for numbers in the first column\, it works.

$ perl -le'while(\<>){print $1 if (/\s+\.[A-Z0-9]*\s+\((.*_VCC3I_PadIO).*$/) }' snip.v ADDR0_VCC3I_PadIO

It's a bug in your code\, not in Perl. - Eric

p5pRT commented 13 years ago

From @tamias

On Wed\, Jan 05\, 2011 at 11​:53​:05AM -0500\, Eric Brine wrote​:

This very question has already been answered elsewhere.

In fact\, it's a repeat of #80882.

Ronald

p5pRT commented 13 years ago

From ktomasek@intersil.com

You are correct.

Thanks for the reply.. kevin

________________________________

From​: David Leadbeater via RT [mailto​:perlbug-followup@​perl.org] Sent​: Wed 1/5/2011 5​:52 AM To​: Tomasek\, Kevin Subject​: [perl #81664] regext fails to recognize a specific pattern for grouped substition

Hi\,

I don't think this is a bug​:

On Tue\, Jan 04\, 2011 at 01​:22​:48PM -0800\, Tomasek\, Kevin wrote​: [..]

perl -e 'while(\<>){print $1 if (/\s+\.[A-Z]*\s+\((.*_VCC3I_PadIO).*$/) }' snip.v

The input is​: ".VCC3I (ADDR0_VCC3I_PadIO)\,"

".VCC3I " doesn't match /\.[A-Z]*\s+/; try a character class of [A-Z0-9] maybe.