in reply to Breaking "long" lines of non-space-seperated characters

You have a syntax error: Remove the +. Also, you can search and replace in one commmand:
$line =~ s/(\S{80})/$1 /g;

Of course, that won't work if $line contains HTML, because it might insert the space inside of a tag, and it wouldn't count tags as a space when it should (e.g. <p>).

Replies are listed 'Best First'.
Re^2: Breaking "long" lines of non-space-seperated characters
by xdg (Monsignor) on Aug 16, 2005 at 16:25 UTC

    With that regexp you'll get an extra space at the end if the line is an even multiple of your breaking width. This handles that case:

    my $width = 8; my $break_at = 4; my $orig = "#" x $width; (my $broken = $orig) =~ s/(\S{$break_at})(?!\z)/$1 /g; print qq{'$orig'\n}, qq{'$broken'\n};

    Result:

    '########' '#### ####'

    Update:

    More ways to do it. With split:

    my $broken = join( q{ }, grep { $_ ne q{} } split( qr/(\S{$broken_at}) +/, $orig ) );

    With substr (ugh):

    my $broken = $orig; for my $chunk ( 1 .. length($broken) / $break_at ) { substr( $broken, $break_at * $chunk + $chunk - 1, 0 , $break_at * $chunk + $chunk - 1 == length($broken) ? q{} : + q{ } ); }

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Re^2: Breaking "long" lines of non-space-seperated characters
by skx (Parson) on Aug 16, 2005 at 15:57 UTC

    Thanks that works, and your point on HTML tags is well noted.

    Steve
    --