#!/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; #### $VAR1 = [ 'name => ', '"foo"', ', fav', '.', 'num => ', '3' ]; #### $VAR1 = [ 'name => ', '"foo"', ', fav.num => ', '3' ];