use strict; use warnings; my @tests = ( "First: /home/user/blah/filename and /home/user/blah/filename2 end", "/home/user/blah/filename,/home/user/blah/filename2", "/home/user/blah/filename; /home/user/blah/filename2", "/home/user/blah/filename\@10:30 /home/user/blah/filename2", ); for my $str (@tests) { $str =~ s!(?:^|/)[^\s,@;]*(?<=/)([^\s,@;]+?)(?=[\s,@;]|$)!$1!g; print "$str\n"; }