#!/usr/bin/perl use strict; use warnings; my $max_len = 6; my $calc_code = sub{ return length($_[0]) > $max_len ? length($_[0]) - $max_len : 0; }; for my $i ( " ab ", " ab ", " abc ", " abcd ", " abcde ", " abcdef ", " abcdefg " ) { my $o = $i; my $extra; $o =~ s/\s{0,$extra}$// if $extra = $calc_code->($o); $o =~ s/^\s{0,$extra}// if $extra = $calc_code->($o); $o =~ s/.{$extra}$// if $extra = $calc_code->($o); printf "%-15s%s", qq("$i"), qq( => "$o"\n); }