>perl -wMstrict -le "my @paths = qw( C:\Tools\scripts\Test\Foo.pl C:\Tools\Test\Unstable\Foo.pl C:\Tools\scripts\Test\Bar.dir\Baz\Foo.pl C:\Tools\Test\Baz\Test\Foo.pl ); ;; my $all_before_Test = qr{ \A (?: (?! \\ Test) .)* }xms; ;; for my $path (@paths) { print qq{'$path'}; my @chunks = $path =~ m{ (?: $all_before_Test | \G) \\ \K [^\\]+ }xmsg; $chunks[-1] =~ s{ [.] [^.]* \z }{}xms; my $msg = join q{ - }, @chunks; print qq{'$msg' \n}; } " 'C:\Tools\scripts\Test\Foo.pl' 'Test - Foo' 'C:\Tools\Test\Unstable\Foo.pl' 'Test - Unstable - Foo' 'C:\Tools\scripts\Test\Bar.dir\Baz\Foo.pl' 'Test - Bar.dir - Baz - Foo' 'C:\Tools\Test\Baz\Test\Foo.pl' 'Test - Baz - Test - Foo'