develooper Front page | perl.perl5.porters | Postings from January 2019

[perl #133782] length($^R) sometimes wrong

Thread Next
From:
Tony Cook via RT
Date:
January 21, 2019 00:42
Subject:
[perl #133782] length($^R) sometimes wrong
Message ID:
rt-4.0.24-30245-1548031332-358.133782-15-0@perl.org
On Sun, 20 Jan 2019 15:09:31 -0800, tonyc wrote:
> On Sat, 19 Jan 2019 05:45:44 -0800, haukex@zero-g.net wrote:
> > Hi everyone,
> >
> > This oneliner fails, when it most likely shouldn't:
> >
> > perl -e 'while( "\N{U+E4}bc" =~ /(..?)(?{$^N})/g )
> >          { length($^R)==length("$^R") or die }'
> >
> > A slightly longer test program (attached) shows that on the second
> > iteration, length($^R) is reporting 2 instead of the expected 1. It
> > seems to have something to do with UTF8 strings, since it works fine
> > on
> > non-UTF8 strings.
> >
> > Tested on several versions of Perl on Linux and Windows (down to
> > 5.8.9).
> 
> From a debugging build:
> 
> $ ./perl -e 'while( "\N{U+E4}bc" =~ /(..?)(?{$^N})/g ){
> length($^R)==length("$^R") or die }'
> panic: sv_len_utf8 cache 2 real 1 for c at -e line 1.
> 
> so I suspect a missing SvSETMAGIC() somewhere.

which the attached should fix.

Tony

---
via perlbug:  queue: perl5 status: open
https://rt.perl.org/Ticket/Display.html?id=133782

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