$_ = ; my @titles = split; my @lens = map length, /\S+\s*/g; $lens[-1] = '*'; my $pat = join "", map "A".$_, @lens; while (defined( $_ = ) && /\S/) { my @more = unpack($pat, $_); for my $i (0..$#titles) { $titles[$i] .= ' '.$more[$i] if length($more[$i]); } }