ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl5-porters
perl5-porters
[BUG] [Regex] Is it a bug? Doing /\G(?=\<)/g twice.
by Shlomi Fish other posts by this author
Nov 4 2009 5:44AM messages near this date
Smoke [5.11.1] v5.11.1-108-gd83f38d FAIL(F) MSWin32 Win2000 SP4 (x86/1 cpu) | Re: [BUG] [Regex] Is it a bug? Doing /\G(?=\<)/g twice.
Hi all!

Today I ran into a problem with some parsing code of mine, and I was able to 
reduce it into the following testcase:

----------------------
#!/usr/bin/perl

use strict;
use warnings;

my $text = "<title> ";
pos($text) = 0;
print (($text =~ m{\G(?=<)}cg) ? "True" : "False");
print "\n";
print 'pos($text) = ', pos($text), "\n";
print (($text =~ m{\G(?=<)}cg) ? "True" : "False");
print "\n";
----------------------

This prints "True" and then "False". The latter surprised me. After chatting 
with it on irc://irc.perl.org/p5p , nothingmuch gave the following 
explanation:

---------------------
#!/usr/bin/perl

use strict;
use warnings;

use Devel::Peek;
no warnings 'uninitialized';

local $\ = "\n";

my $text = "<title> "; 

print "pristine ", pos($text);
Dump($text);

pos($text) = 0;
print "reset pos ", pos($text);
Dump($text);

print (($text =~ m{\G}cg) ? "True" : "False"); 
print "after successful match pos is ", pos($text);
Dump($text);

print (($text =~ m{\G}g) ? "True" : "False");
print "after failed match ", pos($text);
Dump($text);
---------------------

However, to me it seems that implementation details put aside, the code above 
should just work and return two "True"'s.

I've tried it with the Mandriva Cooker perl, and perl-5.8.8 and perl-5.10.x-
latest and they all exhibit the same bug.

Could anyone comment on it? Is this behaviour (arguably mis-behaviour) 
documented anywhere or can anyone give me a good reason for why it should not 
work?

This example is a little simplified - my real code is somewhat more complex 
and less silly.

Regards,

	Shlomi Fish

-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
Freecell Solver - http://fc-solve.berlios.de/

Chuck Norris read the entire English Wikipedia in 24 hours. Twice.
Thread:
Shlomi Fish
Demerphq
Zefram

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved