use strict ; use warnings ; use File::Basename qw( fileparse ) ; my $fullpath = q{C:\somedirectory\anotherDirectory\WorkingDirectory\Logs\myLogs.txt} ; my ( $filename, $dirname, $suffix ) = fileparse $fullpath, qr/\.[^.]*/ ; if ( $filename ne "" && $suffix eq ".txt" ) { ( undef, $dirname ) = split( /(?=WorkingDirectory)/, $dirname ) ; print "filename = $filename\n" ; print "dirname = $dirname\n" ; print "suffix = $suffix\n" ; } else { die "Wrong path!\n" ; } print "shortpath = $dirname$filename$suffix\n" ; __END__ filename = myLogs dirname = WorkingDirectory\Logs\ suffix = .txt shortpath = WorkingDirectory\Logs\myLogs.txt