Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.
To make a long story short, I can't figure out why this is failing (I'm trying to force the regex to fail if it matches a single dot):
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Regexp::Common;
use constant SUCCEED => qr{(?=)};
use constant FAIL => qr{(?!)};
my $QUOTED = $RE{quoted};
my $NUM = $RE{num}{real};
my $VALUE = do {
use re 'eval';
qr/(?:$QUOTED|$NUM)(??{'.' eq $+ ? FAIL : SUCCEED})/;
};
my $text = 'name => "foo", fav.num => 3';
my @text = split/($VALUE)/ => $text;
print Dumper \@text;
That prints:
$VAR1 = [
'name => ',
'"foo"',
', fav',
'.',
'num => ',
'3'
];
What I want it to print is:
$VAR1 = [
'name => ',
'"foo"',
', fav.num => ',
'3'
];
Any ideas?
Try this instead: (Score:2)
Re:Try this instead: (Score:2)
Very interesting. I suspect it would take me a while to debug, but I've discovered that while this passes my test case wonderfully, it fails miserably when using that in the Lexer.pm [plover.com] example from HOP. My test case is clearly not representing the problem as well as I thought since others are having this problem on the Perlmonks site.
A more natural way? (Score:1)
Do you really need a deferred pattern there? I’d write it like so:
(which of course implies variables rather than constants.)
Now given that, you get a zero-length match: