#!/usr/bin/perl use strict; use warnings; my $string = "hello my * name is Rob * and * I am a very nice person * at least * I think * so"; my $part1 = "hello my * name is Rob * and *"; my $part2 = "I am a very nice person * at least * I think * so"; sub split_before { my ($string, $pos) = @_; my $pos = rindex $string, '*', 30; split /(?<=^.{$pos}\*) /, $string, 2 } use Test2::V0; is "$part1 $part2", $string; is [split_before($string, 30)], [$part1, $part2]; done_testing();