my $wrap = 76; my $tab = 4; # spaces occupied by tab while() { do{ print; next } if length($_) < $wrap; do{ print "\n"; next } if m/^\s*$/; s/^(\s*)(?=\S)// or die "Choked on $_\n"; my $indent = $1; my $l_wrap = $wrap - length($indent) - $tab; my @bits = $_ =~ m/\G(.{1,$l_wrap})\s+/gc; for ( my $i = 0; $i <@bits; $i++ ) { print $i == 0 ? "$indent$bits[$i]\n" : "$indent\t$bits[$i]\n"; } } __DATA__ class ClassMyClassNameNoMatterHowLongItIsName:public BaseClass { blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah public: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah } __END__ class ClassMyClassNameNoMatterHowLongItIsName:public BaseClass { blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah public: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah }