>perl -le"'abc1def2' =~ /(?:([a-z])(?{ print $^N }))+2/"
a
b
c
b
c
c
d
e
f
####
use strict;
use warnings;
my @vocabulary = qw( a abc abcd abd bc );
my $sentence = 'abdaabc';
my ($pattern) = map qr/$_/,
join '|',
map quotemeta,
sort { length($b) <=> length($a) } # optional
@vocabulary;
use re 'eval';
local our @list;
$sentence =~ /
(?{ [] })
^
(?: ($pattern) (?{ [ @{$^R}, $^N ] }) )+
$
(?{ @list = @{$^R} })
/x
or die("No solution\n");
print( join('-', @list), "\n" ); # abd-a-abc
##
##
...
use re 'eval';
local our @list;
$sentence =~ /
(?{ [] })
^
(?: ($pattern) (?{ [ @{$^R}, $^N ] }) )+
$
(?{ push @list, join('-', @{$^R}) })
(?!)
/x;
die("No solution\n") if !@list;
print("$_\n") for @list;
##
##
abd-a-a-bc
abd-a-abc