I decided to abuse sprintf, just for fun. I imagine that substr and ikegami's regex solutions are significantly faster with real data.
#!/usr/bin/perl use strict; use warnings; my $max_len = 6; for my $i ( " ab ", " ab ", " abc ", " abcd ", " abcde ", " abcdef ", " abcdefg " ) { my $o = abuse_sprintf($i); printf "%-15s%s", qq("$i"), qq( => "$o"\n); } sub abuse_sprintf { my $i = shift; length $i <= $max_len and return $i; my ( $a, $b, $c ) = $i =~ /\A(\s*)(.*?)(\s*)\z/s or die "bad input"; length($b) >= $max_len and return sprintf "%.*s", $max_len, $b; length($a) + length($b) >= $max_len and return sprintf "%.*s%s", $max_len - length($b), $a, $b; return sprintf "%.*s", $max_len, $a . $b . $c; }
In reply to Re: Truncate string to limited length, throwing away unimportant characters first.
by rowdog
in thread Truncate string to limited length, throwing away unimportant characters first.
by ambrus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |