#!/tmp/bleadperl/bin/perl -w use re 'eval'; my $re; my $len = 20; $_ = "this is a long string, and I want to insert newlines every 20 chars"; $re = qr{ (??{ '\b\w{1,' . ($len - ($+[0] - $-[0])) . '}\b' }) (?(?{ ($+[0] - $-[0]) < $len }) (??{ '\W{0,' . ($len - ($+[0] - $-[0])) . '}' }) (?(?{ ($+[0] - $-[0]) < $len }) (?(?= (??{ '\b\w{1,' . ($len - ($+[0] - $-[0])) . '}\b' })) (??{ $re }) ) ) ) }x; s{($re)}{$1\n}xg; print;