$str = "abracadabra"; my @substrings; $str =~ m/ a (.*) a (.*)(?{push @substrings, $^N}) (?!) /x; use Data::Dumper 'Dumper'; print Dumper [ @substrings ]; #### my $regex="a (.*) a(.)*"; $str =~ m/ $regex(?{push @substrings, $^N}) (?!) /x; #### Eval-group not allowed at runtime, use re 'eval' in regex m/ a(.)*a(?{push @subs trings, $^N}) (?!) / #### $str =~ m/$regex(?{push @substrings, [$^N,$pos,length $^N]}) (?!) /x;