my $string = "This is a test string containing fifty-four characters"; # for example, we'll set limit at 25 my $limit = 25; my @lines = (); push @lines, $_ for ($string =~ /\s*(.{0,$limit}\b)gs); # regex explanation \s* - match any leading spaces ( - start match . - match any character {0,$limit} - up to $limit times ) - end match \b - followed by a word boundary # modifiers g - global (match as many times as you can) s - treat whole string as a single line.