#! perl -slw use strict; sub compactPath { my( $p, $n ) = @_; my $discard = length( $p ) - $n + 3; my $min = $p =~ m[\\[^\\]+$]; $p =~ s[.{$min,$discard}(?=\\[^\\]+$)][...]; return $p; } my $path = "C:\\path1\\path2\\sample.txt";; print $path; print compactPath( $path, $_ ) for reverse 0 .. length $path; __END__ C:\test>junk47 C:\path1\path2\sample.txt C:\path1\pa...\sample.txt C:\path1\p...\sample.txt C:\path1\...\sample.txt C:\path1...\sample.txt C:\path...\sample.txt C:\pat...\sample.txt C:\pa...\sample.txt C:\p...\sample.txt C:\...\sample.txt C:...\sample.txt C...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt ...\sample.txt