sub shorten_filename { my ($filename, $max_length) = @_; $max_length //= 50; # default to 50 characters return $filename if length($filename) <= $max_length; # Reserve 3 characters for "..." my $ellipsis = "..."; my $available = $max_length - length($ellipsis); # Split available space between start and end my $start_len = int($available / 2); my $end_len = $available - $start_len; my $start = substr($filename, 0, $start_len); my $end = substr($filename, -$end_len); return $start . $ellipsis . $end; }