It's late and I'm tired, but I'm banging my head against a silly little problem. It's a long story as to why I need this, but I've stumbled on the following curious problem:
#!/usr/bin/perl use strict; use warnings; use Test::More qw/no_plan/; my $token = '-----'; my $data = "1,2,${token}0${token},4,5"; my $split = qr/(?<!$token),(?!$token)/; my @fields = split $split, $data; my @expected = ( 1,2, "${token}0${token}", 4, 5 ); is_deeply \@fields, \@expected;
I need to be able to split on a value if and only if that value is not immediately preceded and followed by the same fixed-width string. The code above actually assigns the following to @fields:
@fields = ( '1', '2,-----0-----,4', '5' );
It's as if it's doing a logical OR with the two zero-width assertions instead of a logical AND. I suppose it's not unreasonable that it do this, but is there some simple way I can enforce my desired behavior of splitting the resulting string to this?
@fields = ( '1', '2', '-----0-----', '4', '5' );
Also, where is this behavior documented? I'm sure it is somewhere. I just can't find it.
Cheers,
Ovid
New address of my CGI Course.
In reply to Zero-width assertions fail with split by Ovid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |