On Thu, Nov 21, 2002 at 01:41:15PM +0000, Paul Makepeace wrote:
> Perhaps:
> 
> my $str = shift @names;
> $str .= ', '.shift @names while 90 > length $str;
> substr($str, rindex($str, ',', 90)) = ", etc." if 90 < length $str;

Gah, premature send, sorry; I meant to add what I originally had,

    for ($_ = shift @names) {
        $_ .= ", ".shift @names while 90 > length;
        s/^(.{1,90}, ).+?$/$1etc./;
    }

I guess this breaks with names that have ", " in them though.

Thinking out loud,

    for (shift @names) {
        $_ .= ", ".shift @names while 90 > length($_ . $names[0]);
        s/$/, etc./ if @names;
            # use $_
    }

This of course messes with @names, so a my @tmp = splice off first
$max_length/(2+1) would solve that.

Ooh fun! This segfaults Debian's v5.6.1 perl,

    my @names = ('a') x 3;

    for (my ($str, @tmp) = @names) {
        shift @tmp;
    }

Maybe I should perlbug that.

So I'll stick with,

    my ($str, @tmp) = splice @names, 0, 90/3;
    $str .= ', '.shift @tmp while 90 > length($str . $tmp[0]);
    $str .= ', etc.' if @tmp;

Paul

-- 
Paul Makepeace ....................................... http://paulm.com/

"What is the history of love? Samba!"
   -- http://paulm.com/toys/surrealism/

Reply via email to