sub break_width { my ($str_ref, $width, $ws) = @_; $ws ||= '(?!)'; for ($$str_ref) { my $single = qr/$ws|\n|\r|(?s:.)/; return ("", 0) unless /\G((?:$single){1,$width})/gc; (my $result = $1) =~ s/$ws|\n|\r/ /g; return ($result, substr($_,pos)=~/\S/) } } use Perl6::Form; $data = "You can play no part but Pyramus;\n" . "for Pyramus is a sweet-faced man; "; print form {break=>\&break_width}, "|{[[[[[}|", $data;